ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 直播中弹幕、带货和键盘的交互,大厂Android研发岗面试复盘

2021-11-11 15:03:56  阅读:171  来源: 互联网

标签:windowSoftInputMode 界面 键盘 带货 Android 弹幕 android 弹起


效果图

实现思路

====

通过监听键盘的状态以及商品卡片的状态对弹幕区域做 translationY 动画。实现思路就很简单,下面有一些难点

  • 监听键盘状态的实现方法

  • 键盘的高度怎么获取

监听键盘弹出收起

========

因为Android不能对键盘做监听,网上的方案都是用viewTreeObserver去间接的判断的

view.viewTreeObserver.addOnGlobalLayoutListener {

// 在这里通过判断屏幕的可见高度,间接的判断弹出和收起

}

为什么可以通过这种方式去实现呢?

这里先看一下 addOnGlobalLayoutListener 在什么时候被回调的

这里需要对 View 的绘制流程有一定的了解,代码在 ViewRootImpl这个类的 2628 行(API 29)

if (triggerGlobalLayoutListener) {

mAttachInfo.mRecomputeGlobalAttributes = false;

mAttachInfo.mTreeObserver.dispatchOnGlobalLayout();

}

当一个 Activity或者是Dialog 这样的 Window对添加的布局完成测量和布局后就会触发这个回调,从这里可以推断键盘弹出和收起的时候一定触发了 Activity 的重新布局

为什么键盘弹出会触发 Activity 的重新布局

Android提供了 windowSoftInputMode这个属性给开发者去配置键盘的状态以及界面该如何适配键盘

// 当前界面不做改变,键盘直接覆盖在界面上,不会重新布局所以不会触发 GlobalLayoutListener 回调

android:windowSoftInputMode=“adjustNothing”

// 改变当前布局的大小来适应键盘,会触发 GlobalLayoutListener 回调,这个配置就非常适合做微信这种 IM 聊天界面

android:windowSoftInputMode=“adjustResize”

// 直接把布局向上顶,会触发 GlobalLayoutListener 回

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

浏览器打开:qq.cn.hn/FTe 免费领取

android:windowSoftInputMode=“adjustPan”

// 默认值,界面可以滑动会设置成 adjustResize,反之 adjustPan

android:windowSoftInputMode=“adjustUnspecified”

键盘弹起会改变界面布局,所以可以通过上述方式去判断键盘是否弹起

如何判断键盘弹起

键盘弹起会改变当前 Window 的可见区域,那么如果当前可见高度小于原始的高度,我们就判断键盘弹起了

可以通过 View 中的方法获取该 View 所在 Window 的可见区域

view.getWindowVisibleDisplayFrame(Rect)

那么原始高度和现在高度相减的值就是键盘的高度

RecyclerView 顶部渐变消失效果

=====================

Android 直播中弹幕、带货和键盘的交互

RecyclerView提供了这个属性可以达到这个效果(做项目的时候不知道有这个属性,难死了)android:requiresFadingEdge=“vertical”,不过设置这个属性之后android:overScrollMode="never"就没作用了,所以这里重写了RecyclerView

// android:overScrollMode=“never” 样式

edgeEffectFactory = object : EdgeEffectFactory() {

override fun createEdgeEffect(view: RecyclerView, direction: Int): EdgeEffect {

return object : EdgeEffect(context) {

override fun draw(canvas: Canvas): Boolean {

return false

}

}

}

标签:windowSoftInputMode,界面,键盘,带货,Android,弹幕,android,弹起
来源: https://blog.csdn.net/m0_63935442/article/details/121267931

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有