为了账号安全,请及时绑定邮箱和手机立即绑定

WebView添加横向进度条

标签:
Android

通常我们在写WebView时,会遇到需要自定义进度条样式位置的问题,下面我们参照系统的实现方案写一个例子

注:实际效果可以参看微信的web页面顶部进度条,当然颜色就别参看了

 

本质就是通过对Web控件addView添加Progress对象,使用WebChromeClient对WebView 页面进度进行监听



自定义的DrawableId,我们参照系统的实现的方法写一个自己的



[代码]xml代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">  

 

    <item android:id="@android:id/background">   //这个属性是指定progress的背景

        <shape>

            <corners android:radius="5dip" />

            <gradient

                android:startColor="#00000000"

                android:centerColor="#00000000"

                android:centerY="0.75"

                android:endColor="#00000000"

                android:angle="270"

                />

        </shape>

    </item>

 

 

    <item android:id="@android:id/progress">   //这个属性是指定progress的进度

        <clip>

            <shape>

                <corners android:radius="5dip" />

                 <gradient

                    android:startColor="#f69988"

                    android:centerColor="#e84e40"

                    android:centerY="0.75"

                    android:endColor="#dd191d"

                    android:angle="0"

                    />

            </shape>

        </clip>

    </item>

 

</layer-list>

 

实际还有一个secondProgress的属性,这个也随意设置,一般用不到

 

看一下addView添加Progress的实现:

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

Drawable drawable =   context.getResources().getDrawable(DrawableId);//该资源以系统原码为参照搞一个自己想要的角度颜色背景

if (progressbar == null)

    progressbar = new ProgressBar(context, null,   android.R.attr.progressBarStyleHorizontal);//这里必须要使用系统的attr属性才能正常实例化出来

RelativeLayout.LayoutParams layoutParams   = new RelativeLayout.LayoutParams

        (ViewGroup.LayoutParams.MATCH_PARENT,   height);//用相对布局更方便指挥这个progress;代码实现的height都为pix级别

layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);//相对于添加它的父类View,顶部

 

if (progressbar != null) {

    progressbar.setLayoutParams(layoutParams);

    if (drawable != null) {

        progressbar.setProgressDrawable(drawable);

        progressbar.setIndeterminate(false);//此值表明进度是不明确的,我们实际在网页打开过程中并不知道具体进度是多少

    }

}

if (<span style="font-size: 9pt; line-height: 25.2px;">viewGroupParent</span><span   style="font-size: 9pt; line-height: 1.8em;"> == null)</span><br>              return;

viewGroupParent.addView(progressbar);

if (webView == null)

    return;

webView.setWebChromeClient(new WebChromeClient());//给webview提供一个可以监听进度的对象,系统内的WebChromeClient 已经有了这个进度通知方法

下面看我们实现的WebChromeClient

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public class WebChromeClient   extends android.webkit.WebChromeClient   {

      @Override

      public void onProgressChanged(WebView view, int newProgress) {

 

 

          if (newProgress >= Max) {//临界值是用来改变显示状态

              if (progressbar != null)

                  progressbar.setVisibility(View.GONE);

          }   else {

              final int progress = newProgress;//实际能避免新增对象就避免

              if (progressbar != null && progressbar.getVisibility() !=   View.VISIBLE)

                  progressbar.setVisibility(View.VISIBLE);

              if (weakHandler == null)

                  return;

              handler.post(new Runnable() {//handler的实际意图就是为了避免在非主线程改变UI,如果一定要在子线程改变Ui,记得给子线程一个Looper

                  @Override

                  public void run() {

                      if (progressbar != null) {

                          progressbar.setProgress(progress);

                          progressbar.incrementProgressBy(increase);//平缓增加

                      }

                  }

              });

          }

          super.onProgressChanged(view,   newProgress);

      }

 

  }

完活

 

原文链接:http://www.apkbus.com/blog-35555-60412.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消