Android触摸屏开发知识汇总

进行Android触摸屏的程序设计与开发已有三个月的时间了,在这期间,通过无数次的尝试和手势设计,学到了很多知识,下面将我总结的分享给大家。

多点触控

getX是获取以widget左上角为坐标原点计算的X轴坐标直。

getRawX 获取的是以屏幕左上角为坐标原点计算的X轴坐标直。

event.getAction() //获取触控动作比如ACTION_DOWN

event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕

event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引

event.getX(nID); //获取第nID个触控点的x位置

event.getY(nID); //获取第nID个点触控的y位置

event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的

event.getDownTime() //按下开始时间

event.getEventTime() // 事件结束时间

event.getEventTime()-event.getDownTime()); //总共按下时花费时间

事件侦听器

事件侦听器是视图View类的接口,包含一个单独的回调方法。这些方法将在视图中注册的侦听器被用户界面操作触发时由Android框架调用。下面这些回调方法被包含在事件侦听器接口中:

onClick()

包含于View.OnClickListener。当用户触摸这个item(在触摸模式下),或者通过浏览键或跟踪球聚焦在这个item上,然后按下“确认”键或者按下跟踪球时被调用。

onLongClick()

包含于View.OnLongClickListener。当用户触摸并控制住这个item(在触摸模式下),或者通过浏览键或跟踪球聚焦在这个item上,然后保持按下“确认”键或者按下跟踪球(一秒钟)时被调用。

onFocusChange()

包含于View.OnFocusChangeListener。当用户使用浏览键或跟踪球浏览进入或离开这个item时被调用。

onKey()

包含于View.OnKeyListener。当用户聚焦在这个item上并按下或释放设备上的一个按键时被调用。

onTouch()

包含于View.OnTouchListener。当用户执行的动作被当做一个触摸事件时被调用,包括按下,释放,或者屏幕上任何的移动手势(在这个item的边界内)。

onCreateContextMenu()

包含于View.OnCreateContextMenuListener。当正在创建一个上下文菜单的时候被调用(作为持续的“长点击”动作的结果)。

事件处理器Event Handlers

如果你从视图创建一个自定义组件,那么你将能够定义一些回调方法被用作缺省的事件处理器。在创建自定义组件Building Custom Components的文档中,你将学习到一些用作事件处理的通用回调函数,包括:

onKeyDown(int, KeyEvent) – 当一个新的按键事件发生时被调用。

onKeyUp(int, KeyEvent) – 当一个向上键事件发生时被调用。

onTrackballEvent(MotionEvent) – 当一个跟踪球运动事件发生时被调用。

onTouchEvent(MotionEvent) – 当一个触摸屏移动事件发生时调用。

onFocusChanged(boolean, int, Rect) – 当视图获得或者丢失焦点时被调用。

你应该知道还有一些其它方法,并不属于视图类的一部分,但可以直接影响你处理事件的方式。所以,当在一个布局里管理更复杂的事件时,考虑一下这些方法:

Activity.dispatchTouchEvent(MotionEvent) – 这允许你的活动可以在分发给窗口之前捕获所有的触摸事件。

ViewGroup.onInterceptTouchEvent(MotionEvent) – 这允许一个视图组ViewGroup 在分发给子视图时观察这些事件。ViewParent.requestDisallowInterceptTouchEvent(boolean) – 在一个父视图之上调用这个方法来表示它不应该通过onInterceptTouchEvent(MotionEvent)来捕获触摸事件。

viewGroup的dispatchTouchEvent方法会在其onInterceptTouchEvent方法之前被触发。

首先触发ACTIVITY的dispatchTouchEvent

然后触发ACTIVITY的onUserInteraction

然后触发LAYOUT的dispatchTouchEvent

然后触发LAYOUT的onInterceptTouchEvent

总结:

1. 点击屏幕上的某项的执行流程 有两种情况,一种是时间很短,一种时间稍长

时间很短:onDown——–》onSingleTapUp——–》onSingleTapConfirmed

时间稍长:onDown——–》onShowPress——》onSingleTapUp——–》onSingleTapConfirmed

2. 长按事件

onDown——–》onShowPress——》onLongPress

3.抛:手指触动屏幕后,稍微滑动后立即松开

onDown—–》onscroll—-》onscroll—-》onscroll—-》………—–>onFling

4.拖动

onDown——》onscroll—-》onscroll——》onFiling

注意:有的时候会触发onFiling,但是有的时候不会触发有可能是人的动作不标准所致。

boolean onDoubleTap(MotionEvent e)

//双击的第二下Touch down时触发

boolean onDoubleTapEvent(MotionEvent e)

//双击的第二下Touch down和up都会触发,可用e.getAction()区分。

boolean onDown(MotionEvent e)

//Touch down时触发

boolean onFling(MotionEvent e1 MotionEvent e2 float velocityX float velocityY)

//Touch了滑动一点距离后,up时触发。

void onLongPress(MotionEvent e)

//Touch了不移动一直Touch down时触发

boolean onscroll(MotionEvent e1 MotionEvent e2 float distanceX float distanceY)

//Touch了滑动时触发。

void onShowPress(MotionEvent e)

//Touch了还没有滑动时触发

(与onDown,onLongPress比较onDown只要Touch down一定立刻触发。而Touchdown后过一会没有滑动先触发onShowPress再是onLongPress。所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。)

boolean onSingleTapConfirmed(MotionEvent e)

boolean onSingleTapUp(MotionEvent e)

//上面这两个函数都是在touch down后又没有滑动(onscroll),又没有长按(onLongPress),然后Touchup时触发。

//点击一下非常快的(不滑动)Touchup:

onDown->onSingleTapUp->onSingleTapConfirmed

//点击一下稍微慢点的(不滑动)Touchup:

onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed

你可能感兴趣的:(android)