必威体育Betway必威体育官网
当前位置:首页 > IT技术

Android 基础知识按键篇--------------触摸和按键

时间:2019-10-17 09:15:41来源:IT技术作者:seo实验室小编阅读:89次「手机版」
 

触摸按键

Android 下常见的几个触摸事件

(1).dispatchTouchEvent 主要进行事件的分发和处理,当返回true时自己处理,自己消费,事件消失,当返回false时,回溯给父view的onTouchEvent,,是触摸事件要执行的第一个方法,后续的方法要不要执行,都取决于他。

(2).onInterceptTouchEvent 用来做触摸事件的拦截,默认返回false,若果返回false或者super,则事件继续传递,经过的每一层的viewGroup都会去询问是否拦截,若果返回true,则事件不再向下传递给子view,执行自己的onTouchEvent方法后续的move up都在onTouchEvent中执行,不再询问,事件被拦截以后,子view会接收到一个cancel事件,恢复之前的状态,结束事件流。

(3).requestDisallowInterceptTouchEvent 也是用来做事件拦截的,是viewGroup的专有方法,不过一般是在子view中调用的,一但子view调用的话,父view以及上一级父view,不再拦截该事件,事件的接管和拦截有子view控制。

(4).onTouch 当事件被分发到子view的时候,该方法就会被调用,在onTouchEvent方法之前被调用。

(5).onTouchEvent 真正用来处理触摸事件的最后的方法,可以在这里可以写自己的算法和逻辑。

(6).onclick 点击事件,触摸事件的一个内容,在onTouchEvent的UP事件里执行。

(7).onTouch onTouchEvent onClick 三个方法的执行顺序,是 onTouch-> onTouchEvent-> onClick  onClick会消费掉事件,不会再向上回溯。

Android触摸事件分发机制图

(图片来源于网络,侵权立删)

有关触摸事件的总结

1.

dispatchTouchEvent返回false和true对于Activity来说都是一样,因为他是最顶层的事件接收者,而ViewGroup和View返回super则是向下传递,返回false就是向父控件的onTouchEvent回溯事件。

2.

onTouchEvent返回super代表向上回溯事件,返回false则代表自己不处理,所以也是向上回溯事件,如果最终都没消费,则Activity消费,事件消失。

3.

所有方法的super就是默认返回值,就是保证让整个事件流按照U型图走完

onInterceptTouchEvent默认返回super,通过源码我们知道其实就是返回false,默认是不去拦截事件的,这也符合常理,可以让子view有机会去捕获事件,返回true则代表拦截了这个事件,交给自己的onTouchEvent去处理,ViewGroup的dispatchTouchEvent的super默认实现就是调用自己的onInterceptTouchEvent,这也就可以保证事件有机会分发到自己的onTouchEvent

4.

dispatchTouchEvent和onTouchEvent都是以Down事件为基准,来判断后续事件是否经过自己,也就是自己消费,如果Down事件返回了false或者super,则后续事件都不再经过自己了,包括move,up,如只有返回true的时候,后续事件才会经过自己

Activity  ViewGroup View的基本关系图

Android下常见的几个按键事件:

处理物理按键的回调方法:

(1).onKeyDown()该方法是接口KeyEvent.CallBack中的抽象方法,所有的view都实现了该方法并重写了该方法,该方法用来捕捉手机键盘被按下的事件,通过KeyCode来区别不同的按键,返回true表示该方法已经被执行,事件已经被处理,返回false则表示要有其他的view来处理。

(2).onKeyUp()按键松开后触发,默认不会执行任何操作,返回值为false,

(3). onKeyLongPress()  activity和view中均有此方法,但是重载该方法后并不能对该方法做出响应,原因是onKeyDown()中没有对长按还是短按做出处理,一般加如下判断,才可以, 

if (event.getRepeatCount() == 0) {

         event.startTracking();

           isLongPressKey = false;

     }else{

              isLongPressKey = true;

     }

此外要注意在onKeyUp()方法中也要做相应的判断。

相关阅读

LinkedME|Android移动开发者不得不知道的技术 Deep Lin

1.概述 Deep Linking(译:深度链接)作为移动开发者可能对这个概念有点陌生,但是对于它的实现原理,说出来大家肯定都知道。不过我们先说

AndroidSDK下载以及配置

什么是Android SDK Android SDK(Software Development Kit,软件开发工具包)被软件开发工程师用于为特定的软件包、软件框架、硬

Android组件管理框架—后台服务Service之bindService

一 前言 通过startservice来启动一个service,通常该service是无法返回结果的(这也是与bindservice的区别之一),服务开启, 这个服务

Android获取应用签名(开发版SHA1和发布版SHA1)

当我们需要接入百度地图等一系列需要开发版SHA1和发布版SHA1才能创建完成应用的时候,如果找不到开发版SHA1和发布版SHA1是不是很苦

android:state_pressed是什么意思?

是当控件被按下的时候控件的表示,可以实现按下按钮时,按钮变成领一个模样,松开之后又恢复原样。类似的还有:android:state_focused是

分享到:

栏目导航

推荐阅读

热门阅读