OnTouchListener()的onTouch(View v, MotionEvent event)事件以及按键onKeyDown()事件

以前没有太在意 touch(事件)返回值,今天写onTouch事件让控件随着手指移动时,发现 只执行了MotionEvent.ACTION_DOWN , MOVE和UP事件都没有执行,辗转反侧,发现是返回值得问题.

查看super.onTouch()是空的,所以就只有 true或false两种状态

当return false时,就是不消费事件,通知系统不关心这一次touch事件,事件会传给父容器,执行父容器的onTouch事件,这一次的touch事件之后发出的任何action,该View都不会再接受,onTouchEvent在这一次的touch事件中再也不会触发,也就是说一旦View返回false,那么之后的ACTION_MOVE,ACTION_UP等ACTION就不会在传入这个View,但是下一次touch事件的action还是会传进来的。

疑惑的是为什么return false时,会执行DOWN事件,

一个View的onTouch是否接收touch事件并进行处理是由这个view在接收到DOWN事件后没有返回的boolean值决定的。如果一个View的onTouch在接收到DOWN事件之后返回true这说明这个view要处理,后续的Touch事件都会继续传过来,如果返回false就说明不处理,后续的所有Touch事件都不会再传递下来。你在子View的OnTouch中接收到Move事件再返回false不会影响事件是否继续传递给子View。


按键事件

android的onKeyDown函数返回值是这个意思,假如你返回true就是告诉系统我已经对这个回调进行了处理了,不需要系统再处理了。但是你返回false就是告诉系统,我对这个回调做了处理,但是好像不完善,希望系统再帮我处理一下。比如你写这样一个函数
public boolean onKeyDown(int keyCode, KeyEvent event){ //截获按键事件 if(keyCode == KeyEvent.KEYCODE_BACK{//退出对话框 } } return false; }

你返回false那么依然会退出这个activity,就是系统调用的返回的处理。但是你要是返回true,那么就不会退出这个activity,就没有系统对返回的处理。

 当然也有例外的情况

onTouch()返回false时,ACTION_MOVE,ACTION_UP事件都执行了,那是因为你设置了点击事件,或者默认控件的Clickable为true。

比如ImageView 默认Clickable为false 与 ImageButton、button等默认Clickable为true


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值