详解Android手势
来源:互联网 发布:约瑟夫问题c语言 编辑:程序博客网 时间:2024/05/02 02:05
知识点介绍
Matrix
Matrix:对于图像变换,Android系统也是通过矩阵来进行处理的,每个像素点都表达了其坐标的X、Y信息。
初始化矩阵为:
图像的变化处理通常包含以下四类基本变换:
- Translate –平移变换
- Rotate –旋转变换
- Scale –缩放变换
- Skew – 错切变换
Android使用Matrix类
来封装矩阵,并提供了以下几个操作来实现上面的四种变换方式:
- matriX.setRotate() –旋转变换
- matriX.setTranslate() –平移变化
- matriX.setScale() –缩放变换
- matriX.setSkew() –错切变换
- pre()和post() –提供矩阵的前乘和后乘
最后两个方法常用来实现矩阵的混合运算
参考:Matrix学习2、Matrix的基本三种变换Scale、Translation、Skew
GestureDetector
GestureDetector:通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别。
如果我们要implements OnGestureListener·
,必须重写6个函数,其中他们在什么情况下会被触发,情况如下:
- OnDown(MotionEvent e):用户按下屏幕就会触发;
- onShowPress(MotionEvent e):如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行,具体这个瞬间是多久,我也不清楚呃……
onLongPress(MotionEvent e):长按触摸屏,超过一定时长,就会触发这个事件
触发顺序:onDown->onShowPress->onLongPress
onSingleTapUp(MotionEvent e):从名子也可以看出,一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件
触发顺序:
点击一下非常快的(不滑动)Touchup:onDown->onSingleTapUp->onSingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
- onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) :滑屏,用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
参数解释:e1:第1个ACTION_DOWN MotionEvent
e2:最后一个ACTION_MOVE MotionEvent
velocityX:X轴上的移动速度,像素/秒
velocityY:Y轴上的移动速度,像素/秒 onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY):在屏幕上拖动事件。无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法 在ACTION_MOVE动作发生时就会触发
滑屏:手指触动屏幕后,稍微滑动后立即松开onDown—–》onScroll—-》onScroll—-》onScroll—-》………—–>onFling
拖动
onDown——》onScroll—-》onScroll——》onFiling
注意点: MotionEvent.ACTION_DOWN和onDown的区别,都是由也就是说当用户点击的时候,首先MotionEventACTION_DOWN,onDown就会执行
参考:用户手势操作
ScaleGestureDetector
ScaleGestureDetector:是唯一的一个多点触控手势识别api,识别来那个手指(或多个手指)陪着而造成的旋转。虽然用onTouch也可以实现,但是用android.view.ScaleGestureDetector
更优雅。
public class TouchActivity extends Activity implements OnTouchListener private float mScaleSpan = 1.0f; private ScaleGestureDetector mScaleDetector; ... public boolean onTouch(View v, MotionEvent event) { mScaleDetector.onTouchEvent(event); // 在这里通过mScaleSpan 的值来完成你想要的操作 // Perform your magic with mScaleSpan now! ... return true; // indicate event was handled } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { //返回的始终是两个手指之间的距离 mScaleSpan = detector.getCurrentSpan(); // average distance between fingersdetector.getCurrentSpan();//两点间的距离跨度 detector.getCurrentSpanX();//两点间的x距离 detector.getCurrentSpanY();//两点间的y距离 detector.getFocusX(); // detector.getFocusY(); // detector.getPreviousSpan(); //上次 detector.getPreviousSpanX();//上次 detector.getPreviousSpanY();//上次 detector.getEventTime(); //当前事件的事件 detector.getTimeDelta(); //两次事件间的时间差 detector.getScaleFactor(); //与上次事件相比,得到的比例因子 return true; // indicate event was handled } }}
- Android+手势识别详解
- Android 手势识别详解
- Android手势识别详解
- Android手势Gesture详解、、、
- 详解Android手势
- Android 手势&触摸事件详解
- Android:捕捉触摸屏手势详解
- android判断手势方向详解
- Android手势识别GestureDetector详解
- android onTouch和手势基础详解
- Android之手势交互的详解
- GestureDetector.OnGestureListener 详解以及android手势动作详解!
- android手势
- android 手势
- Android手势
- Android:手势
- Android手势
- Android手势
- Thread类的使用
- java使用quartz执行任务调度
- 函数版星号图
- Android_RxJava最简单的用法
- struct 的用法
- 详解Android手势
- 使用ViewFlipper实现屏幕切换动画效果
- Exynos4412 IIC总线驱动开发(二)—— IIC 驱动开发
- springMVC 注解扫面顺序问题
- synchronized
- JAVA多线程和并发基础面试问答
- Linux服务器安装VNC总结
- angular 实现全选、反选、个别选择的实现
- Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析