微信发送视频语音设计效果图

lxf2023-12-16 06:40:01

这儿通过一个自定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>

大家梳理一下构思,要做的就是:

  1. 啥也没干时ParentViewGrouponInterceptTouchEvent要回到false,促使事情能够顺利地从ParentViewGroup传达到VoiceTextView(推送按键)
  2. 点一下到VoiceTextView(推送按键)时,推送按键的dispatchTouchEvent回到true,解决DOWN事件并告知parent必须表明WeChatVoiceView(浮层view)
  3. parent接受到必须表明浮层view的指令,表明浮层view而且onInterceptTouchEvent回到true,表明事情我parent来处理,这时候VoiceTextView(推送按键)能收到一个CANCEL事情而且不会再次接纳MOVE事情。
  4. parent来派发事情,在WeChatVoiceView(浮层view)显现出来后直接将后续MOVE事情交到WeChatVoiceView(浮层view)解决,自然浮层view的onInterceptTouchEvent必须回到true,会调整到浮层view的onTouchEvent,可以直接做相匹配的影片或是手势功能。
  5. 自然别忘记在parent接到ACTION_UP时将浮层view置为看不到,由于事情是通过parent发放给浮层view的,自然parent可以一直取得事情。

到此,全部事情分发的步骤就没有了。 另附编码详细地址WeChatSendVoice

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!