Android手势

手势检测(GestureDetector)

使用
  • 创建GestureDetector实例。
  • 在onTouchEvent方法中,确保调用GestureDetector实例的onTouchEvent方法,回调中定义的方法将在事件发生时执行。
  • 如果监听onContextClick,则必须在View的onGenericMotionEvent方法中调用GestureDetector的onGenericMotionEvent方法。
    其监听相关的回调方法如下所示:
 			    @Override
                public boolean onDoubleTap(MotionEvent e) {
                    Log.e("tag", "========双击事件=========");
                    return super.onDoubleTap(e);
                }

                @Override
                public boolean onSingleTapConfirmed(MotionEvent e) {
                    //点击事件发生300ms后触发
                    Log.e("tag", "========单击确认=========");
                    return super.onSingleTapConfirmed(e);
                }

                @Override
                public boolean onDoubleTapEvent(MotionEvent e) {
                    //双击事件确定发生时对第二次按下产生的MotionEvent信息进行回调
                    Log.e("tag", "========双击事件回调=========");
                    return super.onDoubleTapEvent(e);
                }

                @Override
                public boolean onDown(MotionEvent e) {
                    Log.e("tag", "========按下=========");
                    return super.onDown(e);
                }

                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                    //e1表示手指按下时的Event,e2表示手指抬起时的Event
                    // velocityX表示x上的运动速度(像素/s),velocityY表示y方向上的运动速度(像素/s)
                    Log.e("tag", "========一扔=========");
                    return super.onFling(e1, e2, velocityX, velocityY);
                }

                @Override
                public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
                    //e1表示手指按下时的Event,e2表示手指抬起时的Event
                    // distanceX表示x轴上划过的距离,distanceY表示y轴上划过的距离
                    Log.e("tag", "========滚动=========");
                    return super.onScroll(e1, e2, distanceX, distanceY);
                }

                @Override
                public void onLongPress(MotionEvent e) {
                    Log.e("tag", "========长按=========");
                    super.onLongPress(e);
                }

                @Override
                public void onShowPress(MotionEvent e) {
                    //用户按下时的一种回调,用户手指按下后立即抬起或者事件立即被拦截,时间没有超过 180 ms的话,
                    // 这条消息会被 remove 掉,不会触发这个回调
                    Log.e("tag", "========触摸反馈=========");
                    super.onShowPress(e);
                }

                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    Log.e("tag", "========单击抬起时=========");
                    return super.onSingleTapUp(e);
                }

缩放手势检测(ScaleGestureDetector)

ScaleGestureDetector的用法及方法回调如下所示:

final ScaleGestureDetector detector
                = new ScaleGestureDetector(this, new ScaleGestureDetector.OnScaleGestureListener() {
            @Override
            public boolean onScale(ScaleGestureDetector detector) {
                //缩放被触发,如果返回true则表示当前缩放事件已经被处理
                // 检测器会重新积累缩放因子,返回false则会继续积累缩放因子
                Log.e("tag", "focusX = " + detector.getFocusX());       // 缩放中心,x坐标
                Log.e("tag", "focusY = " + detector.getFocusY());       // 缩放中心y坐标
                Log.e("tag", "scale = " + detector.getScaleFactor());   // 缩放因子
                return false;
            }

            @Override
            public boolean onScaleBegin(ScaleGestureDetector detector) {
                //缩放手势开始,当两个手指放在屏幕上时会调用此方法(只调用一次)
                // 若返回false则表示不使用当前这次手势缩放
                Log.e("tag", "======onScaleBegin=======");
                return true;
            }

            @Override
            public void onScaleEnd(ScaleGestureDetector detector) {
                //缩放手势结束
                Log.e("tag", "======onScaleEnd=======");
            }
        });
        findViewById(R.id.tv_gesturedetector).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                detector.onTouchEvent(event);
                return true;
            }
        });

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值