qq_29916853
qq_29916853
采纳率0%
2016-06-02 07:45 浏览 2.7k

Android中自定义View关于onTouchEvent()方法的返回值

Android自定义View中如果onTouchEvent()返回true,那么onTouchEvent()中的代码就会被执行两次,请问这是为什么?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答 默认 最新

  • b6317 b6317 2016-06-02 08:55

    返回true不就是被拦截了吗?会不会是你的代码里就有两次,或者在down 、move、up的时候有处理

    点赞 评论 复制链接分享
  • qq_29916853 qq_29916853 2016-06-02 10:07

    除了onTouchEvent()以外再没有重写过任何与触摸相关的方法,而且我返回false就很正常,用Toast显示的信息很明白,(返回true调用两次,返回false调用一次)我想不通的是为什么所有资料都没有对这种情况的解释

    点赞 评论 复制链接分享
  • u013147734 渐行渐远是否还有一种坚持留在心间 2016-06-03 08:21

    你返回false正常,那么你的onTouchEvent很可能是在其他地方主动调用的,而且调用没有理会onTouch的返回值,不管返回true或false都继续.
    返回false理论上是不执行down以外的事件的
    重写dispatchTouchEvent之类的方法里面主动调用了
    或者onIntecptTouchEvent,或者父控件主动调用了该View的onTouchEvent事件

    点赞 评论 复制链接分享
  • u013147734 渐行渐远是否还有一种坚持留在心间 2016-06-03 08:24

    我上面的猜测可能想复杂了

    你onTouch事件并没有区分down 、move、up吧.当然会分别执行down 和up了,你移动还会执行move呢
    你返回false,就执行一次,因为那次是down,down之后就不能执行了

    点赞 评论 复制链接分享
  • lxk_1993 103style 2016-06-05 05:44

    两次应该是 down move up 这些触摸事件吧

    点赞 评论 复制链接分享
  • u014257012 qeaq 2016-06-15 07:52

    返回true执行两次应该是down和move,如果返回false那么down之后的事件就会传递给上一层控件由上一层处理,做不到你想要的效果

    点赞 评论 复制链接分享
  • SEU_Calvin SEU_Calvin 2016-10-30 11:09

    还是多了解一下Android的事件分发的内部机制吧
    http://blog.csdn.net/seu_calvin/article/details/52566965

    点赞 评论 复制链接分享

相关推荐