public class MyGesture extends SimpleOnGestureListener {    private GestureDetector gd;    // onGestureListener需要F和onTouchListener配合使用,实际上是onTouchListenerF监听到用户的    // 触摸,他把他所有监听到的用户触摸通知"手势识别"类对象,手势识别类对象处理后触发对应的函数,例如onFling, onLongPress等等。    public void test(MotionEvent ev) {        gd.onTouchEvent(ev);    }    // GestureDetector默认是打开LongPress通知的,但是有个问题,长按后,手不离开屏幕且滑动,这个时候发现没有滑动事件。    // 这个问题的解决办法是设置手势识别对象,禁止产生长按事件    // gd.setIsLongpressEnabled(false);    // 当然,没有禁用长按事件,滑动事件还是有效的,只是要确保触屏后马上滑动,不要等系统产生了长按。    public final class GestureListener implements OnGestureListener {        @Override        public boolean onDown(MotionEvent e) {            // 触摸屏按下时立刻触发            return false;        }        @Override        public void onShowPress(MotionEvent e) {            // 短按,触摸屏按下后片刻后抬起,会触发这个手势,如果迅速抬起则不会;强调的是没有松开或者拖动的状态,由一个ACTION_DOWN触发        }        @Override        public boolean onSingleTapUp(MotionEvent e) {            // 抬起,手指离开触摸屏时触发(长按、滚动、滑动时,不会触发这个手势)            return false;        }        @Override        public boolean onScroll(MotionEvent e1, MotionEvent e2,                float distanceX, float distanceY) {            // 用户按下触摸屏,并拖动,由1个 ACTION_DOWN, 多个ACTION_MOVE触发            return false;        }        @Override        public void onLongPress(MotionEvent e) {            // 长按,触摸屏按下后既不抬起也不移动,由多个 ACTION_DOWN触发        }        @Override        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,                float velocityY) {            // 滑动,触摸屏按下后快速移动并抬起,会先触发滚动手势,跟着触发一个滑动手势            // 参数解释:            // e1:第1个ACTION_DOWN MotionEvent            // e2:最后一个ACTION_MOVE MotionEvent            // velocityX:X轴上的移动速度,像素/秒            // velocityY:Y轴上的移动速度,像素/秒            return false;        }    }    public final class DoubleTapListener implements OnDoubleTapListener {        @Override        public boolean onSingleTapConfirmed(MotionEvent e) {            // 单击确认,即很快的按下并抬起,但并不连续点击第二下            return false;        }        @Override        public boolean onDoubleTap(MotionEvent e) {            // 双击,手指在触摸屏上迅速点击第二下时触发            return false;        }        @Override        public boolean onDoubleTapEvent(MotionEvent e) {            // 双击事件发生的时候,按下和抬起各触发一次            return false;        }        // 对于自定义View,使用手势识别有两处陷阱可能会浪费你的不少时间。        // 1:View必须设置longClickable为true,否则手势识别无法正确工作,只会返回Down, Show, Long三种手势        // 2:必须在View的onTouchListener中调用手势识别,而不能像Activity一样重载onTouchEvent,否则同样手势识别无法正确工作        public class MyView extends View {            private GestureDetector mGestureDetector;            public MyView(Context context, AttributeSet attrs) {                super(context, attrs);                mGestureDetector = new GestureDetector(context, null);                setLongClickable(true);                this.setOnTouchListener(new OnTouchListener() {                    public boolean onTouch(View v, MotionEvent event) {                        return mGestureDetector.onTouchEvent(event);                    }                });            }        }    }}



更多相关文章

  1. Spinner 使用方法小结
  2. android 双击事件的实现
  3. Android中使用事件总线的优缺点
  4. Android自动化测试框架开发(二)Monkey、MonkeyRunner介绍和分析
  5. 定制自己的 Android(安卓)Dialog 信息提示对话框
  6. quick-cocos2d-x android返回键监听并实现原生退出对话框
  7. Android使用AccessibilityService实现USB扫码枪数据抓取
  8. Android(安卓)之 下拉框(Spinner)的使用
  9. 1.5 Button

随机推荐

  1. android中自带的主题(theme)的集
  2. android系统自带的主题与样式(theme and
  3. Android的设计模式-外观模式
  4. android:ellipsize的用法以及跑马灯实现
  5. Android的设计模式-适配器模式
  6. Android进阶(二十)AndroidAPP开发问题汇
  7. Android的设计模式-装饰者模式
  8. android中的style部分属性值介绍
  9. 设计模式目录总纲
  10. [Android常用控件整理]