Android实现长按QQ列表时弹出菜单效果

这里只是简单讲述原理,实现很简单功能,有兴趣的读者可自行优化修改

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/data_list"
        android:layout_width="match_parent"
        android:divider="@android:color/black"
        android:dividerHeight="0.65dip"
        android:layout_height="wrap_content" >
    </ListView>
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/data_empty_li"
        android:orientation="vertical"
        android:gravity="center"
        >
        
         <ImageView
            android:layout_marginTop="100dip"
	        android:id="@+id/imageView1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dip"
        android:text="Click to Refresh" />
        
    </LinearLayout>

</LinearLayout>

关键代码

public class WindowTipActivity  extends Activity implements OnClickListener, OnItemLongClickListener, OnTouchListener
{

	private ListView mListView;

	private ViewGroup mNoDataPanel;

	private final List<String> dataList = new ArrayList<String>();

	private Point pRaw = new Point();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.wintip_list_layout);

		mListView = (ListView) findViewById(R.id.data_list);
		mNoDataPanel = (ViewGroup) findViewById(R.id.data_empty_li);

		mListView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , dataList));
		mListView.setEmptyView(mNoDataPanel);

		mNoDataPanel.setOnClickListener(this);

		mListView.setOnItemLongClickListener(this);
		mListView.setOnTouchListener(this);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
	}

	@Override
	public void onClick(View arg0)
	{
		if(dataList.size()>=20)
		{
			return;
		}
		for (int i = 1; i <=20; i++) 
		{
			dataList.add("菜单-选项("+i+")");
		}

		ArrayAdapter adapter = (ArrayAdapter) mListView.getAdapter();
		adapter.notifyDataSetChanged();
	}

	@Override
	public boolean onItemLongClick(AdapterView<?> parent, View v, int position,long itemId)
	{

		    LinearLayout layout = new LinearLayout(this); 
		    layout.setGravity(Gravity.CENTER);
	        layout.setBackgroundColor(Color.GRAY);  
	        TextView tv = new TextView(this);  
	        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
	        tv.setText(dataList.get(position));  
	        tv.setTextColor(Color.WHITE);
	        tv.setSingleLine(true);
	        layout.addView(tv);  
	        
	        Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
	        
	        PopupWindow popupWindow = new PopupWindow(layout,200,v.getHeight());  
	          
	        popupWindow.setFocusable(true);  
	        popupWindow.setOutsideTouchable(true);  
	        popupWindow.setBackgroundDrawable(new BitmapDrawable());  
	          
	        int[] location = new int[2];  
	        v.getLocationOnScreen(location);  
	          
	        popupWindow.showAtLocation(v, Gravity.NO_GRAVITY,parent.getWidth()/2-100 , location[1]-popupWindow.getHeight());  
	        
		return false;
	}

	@Override
	public boolean onTouch(View v, MotionEvent event)
	{
		if(event.getAction()==MotionEvent.ACTION_DOWN)
		{
			int x = (int) event.getRawX();
			int y = (int) event.getRawY();
			pRaw.set(x, y);
			Log.d("onTouch", "x="+x+" , y="+y);
		}

		return false;
	}
}

效果如下

时间: 2024-10-04 11:15:57

Android实现长按QQ列表时弹出菜单效果的相关文章

Android学习----------长按列表项弹出菜单,给菜单项添加事件,获取上下文

这里是先显示一个listview,长按listview的一个列表项,弹出一个菜单来,菜单有两个条目, "更新该条"和"删除该条",并且这两条都有监听事件,整体就像微信好友对话操作一样. 其中菜单项有一个获取上下文的操作:AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 这句也是用于列表项的. 具体代码如下: protected void onCreate(Bundle

Android点击返回键back时弹出对话框Dialog

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { ExitDialog(MainActivity.this).show(); return true; } return super.onKeyDown(keyCode, event); } private Dialog ExitDialog

IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)

在写项目时,要实现一个从下移上来的一个弹出菜单,并且背景变深的这么一个效果,在此分享给大家. 主要说一下思路及一些核心代码贴出来,要想下载源码, 请到:http://download.csdn.net/download/rhljiayou/6280989 一个简单,效果好,比较实用的菜单弹出效果的实现,效果图: 实现方式:将self.view当前页面缩小,在当前页的上面添加一个菜单的view,即在self.view.superview添加. [cpp] view plaincopy //显示 -

移动端阻止默认长按选中文本和弹出菜单、点击阴影

css:/*阻止默认长按选中文本*/* { /*ios*/ -webkit-touch-callout:none; touch-callout:none; /*安卓*/ -webkit-user-select: none; user-select: none;} js: //阻止默认长按出现菜单 window.ontouchstart = function(e) { e.preventDefault();}; /*阻止默认点击出现阴影*/ *{-webkit-tap-highlight-colo

MFC列表右键弹出菜单

.h文件 protected: afx_msg void OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult); .cpp文件 BEGIN_MESSAGE_MAP(CDemoDlg, CPropertyPage) ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnClick) END_MESSAGE_MAP() void CDemoDlg::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResu

用 zoom.js 给博客园中博文的图片添加单击时弹出放大效果

1.写在前面 由于博客园本身不提供的上传图片后提供单击图片放大的功能,但是我们看到了有些博文却拥有放大图片的功能,自己也想拥有此项功能怎么办呢?博客园的好处就是提供了自定义功能了,具体是怎么实现的呢? 首先我们打开我的博客——管理——设置——申请到JS权限. 拿到权限后,接着去github下载zoom.js功能文件...... 下载解压取出zoom.js和zoom.css文件,将俩个文件上传到——我的博客——管理——文件:如图 点击进入文件,复制URL,如:https://blog-static

Android在初始化时弹出popwindow的方法

http://blog.csdn.net/sxsboat/article/details/7340759 Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但是直接在onCreate()中调用popwindow的showAtLocation()方法是会报异常的,原因是此时activity还没有初始化完毕,网上也有一些解决方法,但一般都是通过延时一小段时间再弹出实现的,代码不够健壮.其实可以通过不断的检测当前activity的状态,一旦初始化完毕立即调用po

Android ListView 长按列表弹出菜单

Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(0, 0, 0, "删除单号"); menu.add

Android ListView两种长按弹出菜单方式

* 知识点1:ListView item:两种长按弹出菜单方式* 知识点2:ListView SimpleAdapter的使用*  知识点 3:在java代码中创建一个ListView*/ -----------------------------------------------------Activity[mw_shl_code=java,true]package org.gxl.com; public class ListOnLongClickActivity extends Activ