PopupWindow泡泡效果

本文介绍了一种使用PopupWindow实现特定效果的方法。通过示例代码详细展示了如何创建并显示PopupWindow,包括初始化数据、设置适配器及响应点击事件等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用手机的时候看到这个效果,上网查了一下,是使用了PopupWindow实现的

在此记录一下:


主要代码:



import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.SimpleAdapter;

public class PopActivity extends ListActivity implements OnItemClickListener{
	private List<Map<String,Object>> list ;
	ListView listview;
	PopupWindow pw = null;
	//头像的Id数组
	int head[]  = {R.drawable.image1,R.drawable.image2,R.drawable.image3,
			R.drawable.image4,R.drawable.image5};
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       listview =  getListView();
        initData();//生成几条记录
        SimpleAdapter adapter =new SimpleAdapter(this, list,R.layout.people ,new String []{"head","name","num"} , new int []{R.id.head,R.id.text,R.id.num});
       setListAdapter(adapter);
      listview.setOnItemClickListener(this);
    }
    public void initData(){
    	list = new ArrayList<Map<String,Object>>();
    	for(int i = 0;i<5;i++){
    		Map<String ,Object> map  = new HashMap<String, Object>();
    		map.put("head", head[i]);
    		map.put("name","第"+i+"位用户");
    		map.put("num","12445533"+i);
    		list.add(map);
    	}
    }
	@Override
	public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
		// TODO Auto-generated method stub
		LayoutInflater factory = LayoutInflater.from(PopActivity.this);
		final View textEntryView = factory.inflate(R.layout.paopao_alert_dialog, null);
		//获取WindowManager对象
		WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);   
		int envWidth = wm.getDefaultDisplay().getWidth();   
		int envHeight = wm.getDefaultDisplay().getHeight();  
		if(pw == null)
		{
			pw = new PopupWindow(textEntryView); 
			pw.showAtLocation(v, Gravity.LEFT,0,0); //在父视图的左上方显示
		}else if(!pw.isShowing()){
			pw = new PopupWindow(textEntryView); 
			pw.showAtLocation(v, Gravity.LEFT,0,0); 
		}
		int pwH = 70;
		int pwW = 166;
		int y = -envHeight/2+v.getTop() + pwH;
		pw.update(0,y,pwW,pwH); //更新位置。
		textEntryView.findViewById(R.id.phone).setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// TODO Auto-generated method stub
				pw.dismiss();
			}

		});
	}
}
主要就是OnItemClick()方法中的实现,获取WindowManager ,得到一个PopupWindow对象,然后显示出来,当然在实际中要去响应PopupWindow中的按钮事件了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值