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

Android实现带进度条的WebView

程序员文章站 2022-11-19 18:53:17
在加载h5页面的时候,可能由于网络、页面内容复杂度等原因,导致加载过程出现空白,加上进度条可以有效提高用户体验 一、自定义progresswebview类 public c...

在加载h5页面的时候,可能由于网络、页面内容复杂度等原因,导致加载过程出现空白,加上进度条可以有效提高用户体验

一、自定义progresswebview类

public class progresswebview extends webview {

  private progressbar progressbar;

  public progresswebview(context context, attributeset attrs) {
    super(context, attrs);
    progressbar = new progressbar(context, null,
        android.r.attr.progressbarstylehorizontal);
    progressbar.setlayoutparams(new layoutparams(layoutparams.fill_parent,
        5, 0, 0));
    drawable drawable = context.getresources().getdrawable(r.drawable.progress_bar_states);
    progressbar.setprogressdrawable(drawable);
    addview(progressbar);
    // setwebviewclient(new webviewclient(){});
    setwebchromeclient(new webchromeclient());
    //是否可以缩放
    getsettings().setsupportzoom(true);
    getsettings().setbuiltinzoomcontrols(true);
  }

  public class webchromeclient extends android.webkit.webchromeclient {
    @override
    public void onprogresschanged(webview view, int newprogress) {
      if (newprogress == 100) {
        progressbar.setvisibility(gone);
      } else {
        if (progressbar.getvisibility() == gone)
          progressbar.setvisibility(visible);
        progressbar.setprogress(newprogress);
      }
      super.onprogresschanged(view, newprogress);
    }
  }

  @override
  protected void onscrollchanged(int l, int t, int oldl, int oldt) {
    layoutparams lp = (layoutparams) progressbar.getlayoutparams();
    lp.x = l;
    lp.y = t;
    progressbar.setlayoutparams(lp);
    super.onscrollchanged(l, t, oldl, oldt);
  }
}

二、布局文件标签写成自定义的类,使用和一般webview一致

最后贴一下drawable下的progress_bar_states

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item android:id="@android:id/background">
    <shape>
      <corners android:radius="2dp" />
      <gradient
        android:angle="270"
        android:centercolor="#e3e3e3"
        android:endcolor="#e6e6e6"
        android:startcolor="#c8c8c8" />
    </shape>
  </item>
  <item android:id="@android:id/progress">
    <clip>
      <shape>
        <corners android:radius="2dp" />

        <gradient
          android:centercolor="#4aea2f"
          android:endcolor="#31ce15"
          android:startcolor="#5fec46" />
      </shape>
    </clip>
  </item>
</layer-list>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。