看看Android源码中View是如何实现LongPress的

Posted bdmh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看看Android源码中View是如何实现LongPress的相关的知识,希望对你有一定的参考价值。

除了最常用的点击事件(Click),还有一个长按事件(LongPress),比如长按弹出复制、粘贴的菜单,长按弹出自定义View等等。这篇文章我们就来看看android源码中是如何实现长按事件的。

既然是手势动作,那就逃不过onTouchEvent。直接找到View代码中的onTouchEvent。

这个时间里面,首先会检查几个是否可点击的状态,比如点击、长按、环境点击(触笔、鼠标右键等)。

final boolean clickable = ((viewFlags & CLICKABLE) == CLICKABLE
        || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)
        || (viewFlags & CONTEXT_CLICKABLE) == CONTEXT_CLICKABLE;

然后还会判断是否可用,以及是否由其它Touch的代理去处理Touch事件。

if ((viewFlags & ENABLED_MASK) == DISABLED)
......
if (mTouchDelegate != null) 

当手势按下时

case MotionEvent.ACTION_DOWN:
......
//判断是否点击的是可滚动的容器
if (isInScrollingContainer) 
    ......
 else 
    // Not inside a scrolling contain

以上是关于看看Android源码中View是如何实现LongPress的的主要内容,如果未能解决你的问题,请参考以下文章

android编程如何实现边下载边播放?

Android:EditText长按选词的过程

Android:EditText长按选词的过程

View源码-Touch事件

Android自定义view之利用PathEffect实现动态效果

ViewGroup源码分析