zoukankan      html  css  js  c++  java
  • Android 手势识别

    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);
                        }
                    });
                }
            }
        }
    }



  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/a284628487/p/3299773.html
Copyright © 2011-2022 走看看