告诉我我并不孤单,在项目里面遇到一个没有道理的问题,在webview的滚动的时候,竟然出现了顶部的view的渲染的问题,哈。。。。。无赖脸~
===============================对,我是分割线=====================================
嗯,开始一看这问题,得,要解决吧,不能说不解决吧,怎么问百度呢,怎么问google呢,好纠结啊,android webview view变色?懵逼脸。。。
废话end。。。。。
理解View的绘制模型:
1.没有硬件加速:invalidate the view hierarchy ------> draw the view hierarchy
2.有硬件加速:invalidate the view hierarchy ------> record and update the display list ------> draw the display list
嗯,没看出什么来,对了,没啥太多的提示。
咳咳,事实是这个样子的,google官方好像早就知道了,留了个大大的坑。
开启硬件加速之后的异常反应:
1.某些UI元素没有显示:可能是没有调用invalidate
2.某些UI元素没有更新:可能是没有调用invalidate
3.绘制不正确:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作
4.抛出异常:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作
哈,引子结束,在我正在优化的项目中,因为用了h5的本地化页面,页面元素比较多,加重了手机的负担,在进行页面的渲染的时候,又在aplication级的地方加入了硬件加速的一个设置,作死。
故而,解决办法,关闭掉硬件加速:
方法:
Application级别:<applicationandroid:hardwareAccelerated="true" ...>
Activity级别:<activity android:hardwareAccelerated="false" ...>
Window级别:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
注意:目前为止,Android还不支持在Window级别关闭硬件加速。
View级别:
myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);