NoScrollViewPager+WebView渲染异常,部分显示白块

场景

NoScrollViewPager + Fragment + WebView
下面是异常显示(左)和正常显示(右)的WebView 截图
NoScrollViewPager+WebView渲染异常,部分显示白块_第1张图片 NoScrollViewPager+WebView渲染异常,部分显示白块_第2张图片
这里有2个因素导致显示异常
1.NoScrollViewPager 即自定义的不可滑动的ViewPager,这个不多说,网上很多。 一般我们在复写public void setCurrentItem(int item) ;的时候都会调用
public void setCurrentItem(int item, boolean smoothScroll); smoothScroll=false 将滚动效果关闭,这样一来就有可能出现webview显示异常问题,把这个改成true就好了。但如果不想要滑动动画而源码不好修改,怎么办呢,来看第二个。

2.硬件加速 android:hardwareAccelerated"
开启硬件加速之后的异常反应:

	 1.某些UI元素没有显示:可能是没有调用invalidate
     2.某些UI元素没有更新:可能是没有调用invalidate
     3.绘制不正确:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作
     4.抛出异常:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

这个才是本次讲的重点,如果不想改变现有的效果,只需要将硬件加速关闭即可

Application级别:
Activity级别:

Window级别:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
注意:目前为止,Android还不支持在Window级别关闭硬件加速。

View级别:
WebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

总结

个人推荐关闭 View级别 直接将WebView的硬件加速关闭,不影响别的地方。另外硬件加速在有些地方真的有很多坑,慎用。

你可能感兴趣的:(Android)