Android手势:单指拖动、双指缩放图片

本文介绍了Android中处理手势的原理,涉及ACTION_DOWN、ACTION_MOVE和ACTION_UP等基本触摸事件。通过使用GestureDetector接口,可以实现如单指拖动和双指缩放等常见手势。然而,自定义手势时可能会遇到事件冲突问题,例如在画圆手势和Scroll事件之间的判断。虽然复杂的交互可以提升用户体验,但应注意不要过度设计。示例代码展示了如何在ImageView中直接处理onTouch事件,实现矩阵变换的单指拖动和双指缩放功能。
摘要由CSDN通过智能技术生成

手势其实是一个比较复杂的东西,首先是因为处理的时机。Android中触摸屏的事件其实只有ACTION_DOWN、ACTION_MOVE和 ACTION_UP这三种,当然我们实现手势的逻辑时,一般会用到GestureDetector,它有许多封装好的事件回调接口,比如onFling、 onLongPress、onScroll等,其实这些事件只是对上面那三个基本时间的包装而已:即三个基本事件按一定的序列出现,则会触发响应的 GestureDetector中的事件,比如ACTION_DOWN 加上三个ACTION_MOVE再加上ACTION_UP就是一次Fling事件等等。

虽然手势能给用户带来比较新奇好玩的体验,GestureDetector这样的接口很容易理解,但是却也有很多问题,主要是自定义手势时。假如我们要实现一个自定义的手势,即当用户在触摸屏上画圆时响应我们的事件处理逻辑,那么当用户画圆时,其实也是一个Scroll事件,这时候就不太好确定到底响应画圆事件还是Scroll事件了。

手势带来的另一个问题是UI的体验,大多数情况下我们需要考虑到用户手指移动的加速度、反馈、期望等,比如快速的滑动和低速的滑动给用户的心理预期是完全不同的,这方面做得比较完美的要数MacBook上的TouchPad了,从单指移动鼠标、双指窗口内移动,到三指窗口间切换、四指返回Home,给用户的体验算是十分优秀的了。当然这都是交互的内容了,不再过多讨论,一般产品中也不建议做太复杂的手势。

一般情况下我们用的比较多的手势就是单指拖拽、双指缩放图片这样的简单手势,下面的代码是ImageView实现单指和双指这两种手势的代码,没有用到GestureDetector,而是仅仅对onTouch事件进行处理:
注:ImageView 中要添加 android:scaleType="matrix"

 

 

float mCurrentScale = 1 ;
float last_x = - 1 ;
float last_y = - 1 ;

mImage . setOnTouchListener ( new OnTouchListener () {
    float baseValue ;

    @Override
    public boolean onTouch
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值