1. 程式人生 > >Android 仿微信載入H5頁面進度條實現

Android 仿微信載入H5頁面進度條實現

前言

AndroidWebView打卡前端頁面時受到網路環境,頁面內容大小的影響有時候會讓使用者等待很久。顯示一個載入進度條可以提升很大的體驗。微信內訪問H5頁面載入效果不錯,效仿著寫了一個。

1.實現

1-1.自定義類繼承WebView類

class ProgressWebView(context: Context, attr: AttributeSet) : WebView(context, attr) {

    /*xml佈局中使用,所以用兩個構造引數的建構函式*/

    private var progressBar: ProgressBar? = null

    /*初始化屬性操作*/
init { /*設定ProgressBar是橫向*/ progressBar = ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal) /*設定進度條屬性*/ progressBar!!.progressDrawable = context.resources.getDrawable(R.drawable.webview_hori_progress) /*設定ProgressBar的佈局引數*/ val layoutParams = FrameLayout.LayoutParams
(LayoutParams.MATCH_PARENT, 10, 0) /*繫結引數*/ progressBar!!.layoutParams = layoutParams /* 將ProgressBar新增到WebView上 預設頭部*/ addView(progressBar) /*設定WebView輔助類WebChromeClient,獲取實時載入進度*/ setWebChromeClient(object : WebChromeClient() { override fun onProgressChanged(webview: WebView?, progress: Int) { super.onProgressChanged
(webview, progress) Log.d("progressView", progress.toString()) if (progress == 100) progressBar!!.visibility = View.GONE else { progressBar!!.visibility = View.VISIBLE /*設定進度引數*/ progressBar!!.progress = progress } } }) } }

看下設定的載入進度條的屬性,webview_hori_progress.xml

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

    <!--最下層item屬性-->
    <item>
        <shape>
            <!--無圓角-->
            <corners android:radius="0dp" />
            <!--線條顏色-->
            <gradient
                android:endColor="#FFE4E3E3"
                android:startColor="#FFE4E3E3" />
        </shape>
    </item>

    <!--上層item屬性-->
    <item>
        <clip>
            <shape>
                <!--無圓角-->
                <corners android:radius="0dip" />
                <!--線條顏色 漸變,由深到淺-->
                <gradient
                    android:centerColor="#96EF1627"
                    android:endColor="#50F53D4B"
                    android:startColor="#FFEF1627" />
            </shape>
        </clip>
    </item>
</layer-list>

1-2.xml 佈局中引用

 <com.ypl.csdndemo.ProgressWebView
      android:id="@+id/wvProgress"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

1-3.程式碼實現

/*android kotlin 的拓展,匯入此包 使用到的元件不用findViewById*/
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        /*WebView設定屬性*/
        val setting = wvProgress.settings

        /*本地快取無則網路*/
        setting.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK

        /*設定識別javascript程式碼*/
        setting.javaScriptEnabled = true

        /*縱向scrollbar去除*/
        wvProgress.isVerticalScrollBarEnabled =false

        /*載入頁面*/
        wvProgress.loadUrl("https://blog.csdn.net/")
    }
}

2.效果圖

這裡寫圖片描述