============问题描述============
具体就是我写了一个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类中该干嘛干嘛。