先说一种比较尴尬的做法,之后说一种非常有效的做法,仿苹果真正的做法.
android:layerType=”software”
这句加在webview控件里面
说实话,对我没啥用.
然后我用了一个最坑的方案,当然仅仅适合少数人使用,就是你的UI整体是深色
那么你和我一样,我采用黑色的界面当做过渡界面
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
v = View.inflate(MainActivity.this,R.layout.fragment_error_replce,null);
view.addView(v , LinearLayout.LayoutParams.MATCH_PARENT , LinearLayout.LayoutParams.MATCH_PARENT);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebView.setLayerType(View.LAYER_TYPE_HARDWARE,null);
view.removeView(v);
}}
我的那个R.layout.fragment_error_replce这个界面,背景黑色,其他啥也没写
然后我试过,如果用户在4G情况下,这个是可以的,如果网络很差,那么非常炸.
这个时候,我推荐用终极必杀方案:让给你HTML的开发少年,让他改采用DCloud技术来处理,这样就过渡,使用效果非常贴近原生了,当然使用学习成本高昂.看DCloud的时候,不会用的时候,可以关注我的专栏,比官方文档好多了.
第二种,真正有效的终极方案:
先说说为什么,因为你点击网页毕竟是在加载的,有一个过程,那么这个过程所以的硬件加速,软件加速是完全能解决的吗,我认为不可以,所以,我认为真正有效的办法就是.让给加载,但是我不给你看到,我用进度条的形式来加载.
我有二个页面,第一个页面,跳第二个页面.我第一个页面顶部写一个加载进度条,加载完了那么我就给你第二页的内容,没加载完,我就不动.
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if(newProgress==100){
pg.setVisibility(View.GONE);
}
else{
pg.setVisibility(View.VISIBLE);
pg.setProgress(newProgress);
}
}});