这儿通过一个自定view的事例来说事情派发在自定view里的应用,其实大多数的Android框架内事件分发的都一样的模样,毛遂自荐,我自己做一个纪录,假如能帮需要帮助的人那么就更上一层楼。
先来说一个微信发送视频语音设计效果图:
有关事情派发我们其实广为人知,能通过一段非常有名的伪代码来大概了解:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean consume = false;
if(onInterceptTouchEvent(ev)){
consume = onTouchEvent(ev);
}else {
consume = child.dispatchTouchEvent(ev);
}
return consume;
}
事情也是从一个DOWN逐渐,正中间通过一堆MOVE,到一个UP完毕(先撇开CANCEL的现象)。
事情流入画上大半天,觉得都没有别人画的好,可以参考一下 这儿 ,非常清晰,忘了的或小细节不太清楚淡化了的朋友可以换步去练习一下。
我们的需求是点一下推送按键
后表明浮层view
,等同于事情一般由推送按键
解决,等浮层view
表明之后再交给浮层view
解决,这件事情的流入非常清晰,那该怎么做呢。
那简单的view的层次结构便是推送按键
和浮层view
处于同一等级,那一个难题,事情如何在parent什么事都不做的情形下完成事情在同级别view间的迁移呢?
自然是不能够换句话说没必要的,最好的选择还是用parent做派发,由parent的决策这时究竟是需要将事情交到推送按键
或是浮层view
。
因此层次结构上:
<?xml version="1.0" encoding="utf-8"?>
<!-- parent, 来调节事件派发 -->
<com.yocn.af.view.widget.WeChatParentViewGroup
android:id="@ id/wechat_root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@ id/ll_option"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true">
<!-- 推送按键view -->
<com.yocn.af.view.widget.WeChatVoiceTextView
android:id="@ id/tv_voice"
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:text="按着 讲话"/>
</LinearLayout>
<!-- 点一下后需标注的浮层view -->
<com.yocn.af.view.widget.WeChatVoiceView
android:id="@ id/voice_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/half"
android:visibility="gone" />
</com.yocn.af.view.widget.WeChatParentViewGroup>
大家梳理一下构思,要做的就是:
- 啥也没干时
ParentViewGroup
的onInterceptTouchEvent
要回到false,促使事情能够顺利地从ParentViewGroup
传达到VoiceTextView(推送按键)
- 点一下到
VoiceTextView(推送按键)
时,推送按键的dispatchTouchEvent
回到true,解决DOWN事件并告知parent必须表明WeChatVoiceView(浮层view)
- parent接受到必须表明浮层view的指令,表明浮层view而且
onInterceptTouchEvent
回到true,表明事情我parent来处理,这时候VoiceTextView(推送按键)
能收到一个CANCEL事情而且不会再次接纳MOVE事情。 - parent来派发事情,在
WeChatVoiceView(浮层view)
显现出来后直接将后续MOVE事情交到WeChatVoiceView(浮层view)
解决,自然浮层view的onInterceptTouchEvent
必须回到true,会调整到浮层view的onTouchEvent
,可以直接做相匹配的影片或是手势功能。 - 自然别忘记在parent接到ACTION_UP时将
浮层view
置为看不到,由于事情是通过parent发放给浮层view
的,自然parent可以一直取得事情。
到此,全部事情分发的步骤就没有了。 另附编码详细地址WeChatSendVoice
本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!