Android 仿微信載入H5頁面進度條實現
阿新 • • 發佈:2019-02-03
前言
Android中WebView打卡前端頁面時受到網路環境,頁面內容大小的影響有時候會讓使用者等待很久。顯示一個載入進度條可以提升很大的體驗。微信內訪問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.效果圖