(3)事件(苹果)传递,不像我们人一样要害羞要矜持,推来推去,比如这个苹果孩子不分发给他的孩子但是他自己又不想消费(吃掉)而是返回给我,那么我就是只有两个选择要么消费(吃掉)要么返回给我的父类进行处理,不能推来推去,就是不能孩子给我了事件(苹果),我又来分发给孩子,这是不行的,这样就是个死循环。

(4)总之我拿到这个事件(苹果)会往我的孩子进行传递,我的孩子也可以往他的孩子进行传递和消费,这样转往下走,如果有一个孩子消费掉这个事件(吃掉苹果),那么该事件结束。如果孩子都不消费那么就会从最下面的孩子一层层传上来传到我手里进行处理。

(5)记住 分发 拦截 处理。任何孩子拿到该事件第一步就是往下面分发,如果中途有拦截那么久就自己处理,直到分到最底层就辈分最低的孩子,如果该事件就往上给父亲处理。

在这里插入图片描述

四、主要方法介绍


(1)dispatchTouchEvent(MotionEvent event)

决定touch事件是否派发。在View和Activity中都有这个方法。

(2)onTouchEvent(MotionEvent event)

如果返回true,则表示这个事件被消费掉,如果返回false则将事件向上一层父容器传递。

(3)onInterceptTouchEvent(MotionEvent ev)

是否拦截touch事件,如果拦截,则不传递事件到子View,否则事件继续传递给子View,所以这个接口只有ViewGroup的派生类才有,View是没有该接口的。

五、代码分析


自定义ViewGroup,和View的子类,重写消息传递的几个方法:

public class TouchView extends View {

private static final String TAG = TouchView.class.getSimpleName();

public TouchView(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

Log.d(TAG, “TouchView onTouchEvent action=” + event.getAction());

return true;

}

@Override

public boolean dispatchTouchEvent(MotionEvent event) {

Log.d(TAG, “TouchView dispatchTouchEvent action=” + event.getAction());

return super.dispatchTouchEvent(event);

}

}

public class TouchViewGroup extends FrameLayout {

private static final String TAG = TouchView.class.getSimpleName();

public TouchViewGroup(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

Log.d(TAG, “TouchVIewGroup dispatchTouchEvent action=” + ev.getAction());

boolean dispatch = super.dispatchTouchEvent(ev);

return dispatch;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

Log.d(TAG, “TouchVIewGroup onTouchEvent action=” + event.getAction());

return super.onTouchEvent(event);

}

}

public class MainActivity extends AppCompatActivity {

private static final String TAG = TouchView.class.getSimpleName();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以加一下下面的技术群来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

这里放一下资料获取方式:GitHub

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

csdn.net/topics/618156601)**

[外链图片转存中…(img-MftxEygO-1711293472132)]

好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-9JCAkDcr-1711293472133)]

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐