项目实训(九)手势相关

官方文档:https://developer.android.google.cn/reference/android/view/MotionEvent.html#ACTION_MASK

首先要清楚事件分发机制,在一次事件序列(从按下到抬起)中会产生若干个MotionEvent,首先会调用onTouch(setOnTouchListener)进行处理,如果返回false的话说明没有消耗,交给onTouchEvent处理,另外click是基于onTouchEvent的,所以也是排在onTouch之后。

屏幕是支持多点触控的,每一个放上的手指(pointer)都会获得一个标识Id,这个id在整个时间序列中是不变的。另外,对于每一个MotionEvent,每一个pointer还有一个Index,这个序号是没有规律的,不和Id对应,也不保证不变。event取Pointer各种信息用的都是index,可以通过event.getPointerId(int index)把id和index对应起来,找到你想要的指定pointer的信息。

 

手势监测:所谓的手势监测就是对MotionEvent的各种参数进行处理分析,来得出例如旋转缩放等结论。实际上,官方类库提供了一些用来分析事件的类,如:GestureDetector,ScaleGestureDetector。这两个类使用方式一样,在构造器中传入context和对应的回调接口实例化。然后将MotionEvent传给他们的onTouchEvent进行处理,处理后会调用回调接口返回结果。

以缩放手势监测为例:

    public interface OnScaleGestureListener {
        boolean onScale(ScaleGestureDetector var1);

        boolean onScaleBegin(ScaleGestureDetector var1);

        void onScaleEnd(ScaleGestureDetector var1);
    }

ScaleGestureDetector在onTouchEvent中判断为缩放后会调用onScale,然后可以通过var1.getScaleFactor获取缩放比例。

另外也可以自定义手势监测工具类,比如旋转手势监测,储存上一次的事件,然后比较两个事件中两个手指的点的位置,经过计算就可以得出旋转角度。只用到了event的位置信息,应该还是比较简单的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值