首页 > 代码库 > 怎么在popupwindow上监听手势

怎么在popupwindow上监听手势

============问题描述============


具体就是我写了一个popupwindow类,implements OnGestureListener,但是一般都得在onTouchEvent里边返回true,可是popupwindow里边没有这个方法,所以当有手势的时候就没走OnGestureListener的那些onSingleTapUp、onShowPress等方法。。请问如何解决这个问题。
就是说我想在popupwindow弹出后,监听上边的手势。

============解决方案1============


我觉得你可以思考一下一下2个问题:
     (1)是不是非的监听整个popwindow窗口的手势,如果监听里面某一个控件的手势行不行?
     (2)为什么要让popwindow窗体来继承 OnGestureListener,为什么不直接新建一个手势类,然后让popwindows窗体来绑定这个类。

我给你2种解决方案:
(1)根据你的描述,假定你如果得到了onTouchEvent的事件就可以解决这个问题,所以我给出的第一个解决方案是:implements OnTouchListener, OnGestureListener多继承一个OnTouchListener事件,里面自动继承一个onTouch事件,该事件和你刚纔所说的onTouchEvent等价。
(2)第二种方法,有点取巧,假设你的popwindow的布局文件类似如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/poplayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 ......
</RelativeLayout>


新建一个类叫做MyGestureListener.java,代码如下:
class MyGestureListener implements OnTouchListener, OnGestureListener {

		@Override
		public boolean onDown(MotionEvent e) {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			return false;
		}

		@Override
		public void onLongPress(MotionEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2,
				float distanceX, float distanceY) {
			return false;
		}

		@Override
		public void onShowPress(MotionEvent e) {
			// TODO Auto-generated method stub

		}

		@Override
		public boolean onSingleTapUp(MotionEvent e) {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			gesture_detector.onTouchEvent(event);
			return false;
		}

	}

在对应的函数中调用:
	RelativeLayout poplayout=poplayout=(RelativeLayout)findViewById(R.id.pop);
poplayout.setOnTouchListener(new MyGestureListener());


这样一来就能实现手势调用了,在MyGestureListener类中该干嘛干嘛。

怎么在popupwindow上监听手势