android代码划屏,Android仿抖音右滑清屏左滑列表功能的实现代码

概述

​ 项目中要实现仿抖音直播间滑动清屏,侧滑列表的功能,在此记录下实现过程和踩坑记录希望避免大家走些弯路,也当作自己的一个总结

​ 首先看下Demo中的效果

407c26ca657cf0d80d6d04015eb70987.png

​ 阅读文章需要提前熟悉些事件分发的内容,相信大家都已经了解过了,网上也有很多优秀的文章,这里推荐两篇自己读过印象较深的文章

https://www.jb51.net/article/124249.htm

https://www.jb51.net/article/124861.htm

关于这方面的知识,在Android中是再重要不过的了,是迟早都要掌握的知识,所以还是希望大家都能提早掌握,最好可以跟着源码一起分析,理解掌握的更深刻一点

实践

所以网上基于这部分内容讲解已经很详细了,这里就不再搬砖了,主要分享一下自己项目中结合这部分知识运用过程中产生的一些想法和经验,解决的一些bug

0d88af49c1faceadcac28a742c1a83c7.png

以上就是功能在实现过程中要解决的问题,下面详细展开

1. 布局结构

​ 布局结构始终是界面设计时首先要考虑的一个问题,从接到一个需求开始,首先要根据项目中现有的布局结构,考虑如何更优雅的嵌入布局层次。如果一不小心,走上了错误的实现道路,那么不好意思,即使功能最后实现了,到了后期,也有千万种理由迫使你不得不走上重构的道路。

​ 比如实现不合理,导致的布局结构复杂,嵌套冗余层次,比如代码业务逻辑处理复杂蹩脚,比如资源浪费,内存消耗过多等等。虽然功能好使,使用起来也没有差别,但是,作为一个有追求的程序员,我们还是要避免这种情况的发生不是吗

不巧的是,本文就属于上述踩坑记录,下面详细分析

1.1 初步实现

​ 上来以后,思路很直接明了的去想要实现清屏和滑屏的功能是每个房间都有的功能,每个房间又都是一个RecyclerView 的一个Item。所以,很明显在Item的布局上包一层,实现清屏和侧滑列表的功能就可以了,这样每个房间都可以上下滑,切换房间。切换以后,滑屏的功能是在每个房间里的,互不影响,所以很好理解

我们项目中实现直播间上下滑切换的功能是RecyclerView + 自定义LinearLayoutManager实现的,这部分内容网上demo很多,就不展开了

​ 具体实施,是自定义布局继承RelativeLayout,解析自定义的布局文件,里面包含,直播间的房间布局,和自己右侧滑块儿布局,然后用自己实现的布局替换之前的房间Item布局位置

12984bbb1bb3264f6332c7c72a4f4e45.png

由于我们自定义的Container布局是继承子RelativeLayout实现的,内部三个子View 又全部是占满父布局的,所以就是三层覆盖的效果,类似抖音直播间效果

这里我们尽量将覆盖层/清屏控件,封装成一个ViewGroup 内部包含了上边细分的各个子View,例如头部个人信息,头像列表等等;中间弹幕,SVGA礼物展示区域;底部聊天评论区域方便管理

还有右侧滑块我们也做成继承自RelativeLayout形式,解析自定义布局,方便扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Android仿抖音评论功能实现代码示例: 1. 布局文件 ``` <RelativeLayout android:id="@+id/layout_comment" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_comment" android:padding="10dp"> <EditText android:id="@+id/edit_comment" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:hint="请输入评论内容" android:textColor="@color/black" android:textSize="16sp" /> <TextView android:id="@+id/btn_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="发送" android:textColor="@color/colorAccent" android:textSize="16sp" /> </RelativeLayout> ``` 2. Activity中的代码 ``` private EditText mEditComment; private TextView mBtnSend; private RelativeLayout mLayoutComment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditComment = findViewById(R.id.edit_comment); mBtnSend = findViewById(R.id.btn_send); mLayoutComment = findViewById(R.id.layout_comment); mBtnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String comment = mEditComment.getText().toString(); if (!TextUtils.isEmpty(comment)) { // 发送评论内容到服务器 sendComment(comment); } } }); } private void sendComment(String comment) { // 发送评论内容到服务器的代码 // ... // 接收服务器返回的评论结果 boolean success = true; // 根据服务器返回的结果设置success的值 if (success) { // 添加新评论 TextView tvComment = new TextView(this); tvComment.setText(comment); tvComment.setTextColor(getResources().getColor(R.color.black)); tvComment.setTextSize(16); mLayoutComment.addView(tvComment); // 清空评论输入框 mEditComment.setText(""); } else { Toast.makeText(this, "评论失败,请稍后重试", Toast.LENGTH_SHORT).show(); } } ``` 需要注意的是,上述代码仅为示例代码,具体实现还需要根据自己的需求进行修改和完善。比如需要处理用户登录状态、评论内容的过滤和审核等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值