Touch事件和手势处理:
Touch事件:表示触摸,在使用安卓设备的时候,大多操作时通过触摸完成、单击、滑动(手在屏幕上的触摸)
响应操作。
事件的派发和处理逻辑。
Touch事件:用户的手势操作:单击、长按、滑动
View中定义了onTouchEvent方法,子类都可以重写
每个Activity中也可以处理触摸事件
View.OnTouchListener()
MotionEvent对象
getAction():获取操作类型
getX():
getX(int pointerIndex):
getY():
getY(int pointerIndex):
ACTION_DOWN:刚按下
ACTION_UP:移开
ACTION_MOVE:手在移动
处理Touch事件的返回值,true表示事件已经被处理过了,不需要后续处理,false:后续会继续处理
处理Touch事件:
View.onTouchEvent():其次
Activity.onTouchEvent():最低,范围最大
View.onTouchListener():优先级最高
这几个方法的返回值
重写这些方法
1.View.onTouchEvent():重写View的onTouchEvent,需要定义一个View(自定义View),创建一个类继承View。
CustomTextView extends TextView{
onTouchEvent(MotionEvent event){
switch event.getAction()
case:
ACTION_DOWN:刚按下
ACTION_UP:移开
ACTION_MOVE:手在移动
}
}
2.重写Activity 的onTouchEvent()方法。
方法的返回值
Touch事件的分发:
视图系统分为:View与ViewGroup
View:独立显示
ViewGroup:承载
处理事件:
dispatchTouchEvent(MotionEvent ev):处理事件分发
onInterceptTpuchEvent(MotionEvent ev):处理事件拦截,简单的View不存在子类,就不存在拦截
public boolean onTouchEvent(MotionEvent ev):处理事件响应
ViewGroup的层级嵌套
分发和拦截是从大到小
事件处理是从小到大
屏幕上的事件都是触摸事件
单击事件是消费事件,由控件本身消费,ViewGroup不会获得该事件,也不会对它进行处理。
手势处理:
如何去判断各种事件?
重写Activity 的onTouchEvent()方法,
//按下时间与弹起时间间隔应小于500毫秒
//按下坐标点x与弹起坐标点y的差值应小于30
在Activity的任何位置按都会响应
安卓中定义了手势探测器,会把手势类型判断好
GestureDetector;
继承接口: