欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android开发webview遇到的坑(模仿微信)

程序员文章站 2022-04-26 18:33:28
...

仿照微信的webview加载

先看效果图
android开发webview遇到的坑(模仿微信)
在写这个功能的时候遇到的问题是动画和本身的加载并不是同步,也就是出现了加载动画的闪,原因就是progress从0–>100–>0,效果非常难看,通过log日志可以看出

android开发webview遇到的坑(模仿微信)
明明是一个链接却走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)

相关标签: webview