本文主要分享下直播中的弹幕、键盘还有带货卡片的交互效果的实现方式
效果图
实现思路
通过监听键盘的状态以及商品卡片的状态对弹幕区域做 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这个属性给开发者