安卓recyclerview嵌套webview造成的滑动冲突解决以及webview加载完之前白屏的问题解决

博客介绍了如何解决安卓RecyclerView嵌套WebView导致的滑动冲突问题,通过重写布局的触控事件,判断用户滑动角度来实现平滑交互。同时,提出了解决WebView加载前白屏现象的方法,通过设置WebView在加载过程中的可见性来避免白屏。
摘要由CSDN通过智能技术生成

此博客作为技术记录用,希望能帮助到需要的人。

安卓recyclerview嵌套webview造成的滑动冲突

最近在做一个智能客服的项目,整个聊天内容是一个recyclerview,里面每一条信息都是一个item,不同类型的回复对应不同的viewholder,其中有一个item的布局中有一个webview,该webview加载的h5页面的实际长度超过了手机屏幕的宽度,所以需要能够左右滑动,但是用户实际滑动过程中不可能完全水平滑动,更多是小角度的斜着滑。

如果你了解view的事件分发机制和滑动的原理,就能预见到斜着滑动会导致这个webview在水平方向滑动会特别生硬且伴随着上下抖动。这是由于view滑动的原理是在一段时间内不断的调用draw方法重新绘制view,每次绘制之间的时间间隔很短,这样就实现了平滑的滑动效果(原理类似动画的制作)。

至于view的事件分发可以看看郭神的博客
Android事件分发机制完全解析,带你从源码的角度彻底理解(上).
此处我是使用了一个相对布局作为一个webviewcontainer,通过设置其背景图片来设置聊天信息的背景图(类似qq)。


此问题的解决办法是:重写这个相对布局,并重写它的ontouchevent方法,在方法中计算出用户滑动的方向和水平方向的夹角,如果超过60°,就判定为用户想上下滑动,就调用requestDisallowInterceptTouchEvent方法来干预其父控件recyclerview的intercptouchevent方法,让它拦截这个事件并处理;如果小于60°,就认为用户想左右滑动,即不让recyclerview拦截该事件。代码如下:


public class AiRelativeLayout extends RelativeLayout {
   
        public float oldY;
        public float oldX;
        public float newY;
        public float newX;
        public AiRelativeLayout (Context context){
   
            super(context);</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值