android开发webview遇到的坑(模仿微信)
程序员文章站
2022-04-26 18:33:28
...
仿照微信的webview加载
先看效果图
在写这个功能的时候遇到的问题是动画和本身的加载并不是同步,也就是出现了加载动画的闪,原因就是progress从0–>100–>0,效果非常难看,通过log日志可以看出
明明是一个链接却走onPageFinished方法四次,原因就是这个链接要经过页面中转,并且还需要登录,第三次和第四次调用的链接是一样的url,同样的链接在微信就不会出现这样的问题,参照这里,设置全局的flag,然后对progress做一些处理,
这里为了更好的效果progress的前一半是采用的一个线程200毫秒刷新一次,
设置一个Boolean全局变量flag,
-
在onPageStarted()中设置为true,若加载样式没有开启,就开启进度条等加载样式;
-在onPageFinished()中检测,如果为true,就说明已经是目的地址,可以关闭加载样式,如果是false,就不做处理,继续等待;
-在shouldOverrideUrlLoading()中,设置为false,若加载样式没有开启,就开启进度条等加载样式
这样就可以很好的控制加载样式和网址跳转之间的关系了。
或参考:How to listen for a WebView finishing loading a URL?
Thread t = new Thread() {
@Override
public void run() {
super.run();
try {
while (true) {
if (progressBar.getProgress() < 50) {
mHandler.sendEmptyMessage(22);
sleep(200);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t.start();
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 22:
progressBar.setProgress(progressBar.getProgress() + 2);
break;
}
}
};
最后的一半采用真实的progress,就是在onProgressChanged方法中更新progress.
参考了(http://blog.csdn.net/nifanggge/article/details/72814472)