你好SimpleOnGestureListener不能在我的应用程序中工作这就是我实现它的方式.也许你可以发现什么是错的.事情是调试显示应用程序永远不会进入onFling(…)方法和gdt.onTouchEvent(事件);总是返回false:/
有任何想法吗??谢谢
有任何想法吗??谢谢
我的活动课
public class SimpleActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simpleLayout); final ImageView imageView = (ImageView) findViewById(R.id.gggbbb); imageView.setOnTouchListener(new OnFlingGestureListener() { @Override public void onTopToBottom() { System.out.println("top"); } @Override public void onRightToLeft() { System.out.println("right"); } @Override public void onLeftToRight() { System.out.println("left"); } @Override public void onBottomToTop() { System.out.println("bottom"); } }); } }
我的抽象听众
package com.dmd.client.detailsMenus; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public abstract class OnFlingGestureListener implements OnTouchListener { private final GestureDetector gdt = new GestureDetector(new GestureListener()); @Override public boolean onTouch(final View v,final MotionEvent event) { return gdt.onTouchEvent(event); } private final class GestureListener extends SimpleOnGestureListener { private static final int SWIPE_MIN_DISTANCE = 60; private static final int SWIPE_THRESHOLD_VELOCITY = 100; @Override public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY) { if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { onRightToLeft(); return true; } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { onLeftToRight(); return true; } if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { onBottomToTop(); return true; } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { onTopToBottom(); return true; } return false; } } public abstract void onRightToLeft(); public abstract void onLeftToRight(); public abstract void onBottomToTop(); public abstract void onTopToBottom(); }
解决方法
替换此事件:
@Override public boolean onTouch(final View v,final MotionEvent event) { gdt.onTouchEvent(event); return true; }
它应该工作