Android自定義帶進(jìn)度條WebView仿微信加載過程
在正常開發(fā)中,我們客戶端需要用webView加載網(wǎng)頁,再遇到網(wǎng)絡(luò)慢或者訪問的服務(wù)器響應(yīng)時,頁面是空白的,所以為了用戶更好的體驗,我們可以提供一個正在加載的進(jìn)度條,提示用戶正在加載。
本文結(jié)構(gòu):
1、自定義webView
2、在應(yīng)用中的使用
3、效果展示
一、自定義webView
1、首先定義一個類,繼承webView,并首先構(gòu)造方法
public class ProgressBarWebView extends WebView{}
自定義控件,先實現(xiàn)構(gòu)造方法,
第一中是程序內(nèi)部實例化采用,傳入context
public ProgressBarWebView(Context context) {
super(context);
}
第二種用于layout實例化,會把xml的參數(shù)通過AttributeSet帶入View內(nèi)
public ProgressBarWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
第三種主題的style信息,也從XML帶入
public ProgressBarWebView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
而我們需要加載進(jìn)度條布局,所以我們需要在第二中構(gòu)造方法中進(jìn)行操作,如下:
//首選創(chuàng)建一個進(jìn)度條,我們這里創(chuàng)建的是一個橫向的進(jìn)度條 progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal); //設(shè)置該進(jìn)度條的位置參數(shù) progressBar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 10, 0, 0)); //我們想要設(shè)置該進(jìn)度條的背景樣式 Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states); //設(shè)置背景樣式 progressBar.setProgressDrawable(drawable); //調(diào)用本身的addView(其實是調(diào)用ViewManager里的方法,看源碼)方法講進(jìn)度條添加到當(dāng)前布局視圖中 addView(progressBar); //正常想獲取或這進(jìn)行交互一般要實現(xiàn)一下兩個方法,Myweblient()可以限制不用手機(jī)本身的瀏覽器,MyChromeClient()可以獲得網(wǎng)頁加載的進(jìn)度,title等 setWebViewClient(new Myweblient()); setWebChromeClient(new MyChromeClient()); //是否可以縮放 getSettings().setSupportZoom(true); getSettings().setBuiltInZoomControls(true);
2、重寫WebViewClient,設(shè)置再本身的webview打開,不調(diào)用系統(tǒng)的瀏覽器:
//需要自己設(shè)置要不會打開手機(jī)瀏覽器
private class Myweblient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
3、重寫WebChromeClient,獲取相應(yīng)進(jìn)度信息,并設(shè)置
private class MyChromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) { //當(dāng)網(wǎng)頁全部加載完畢時
progressBar.setVisibility(GONE);
} else {
if (progressBar.getVisibility() == GONE)
progressBar.setVisibility(VISIBLE);
progressBar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
}
4、前文構(gòu)造器我們提到的進(jìn)度條背景R.drawable.progress_bar_states,需要再xml中定義;
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 進(jìn)度條背景 --> <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> <!-- 綠色的進(jìn)度值 --> <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>
二、在頁面中的使用
//布局中 <com.example.videodemo.ProgressBarWebView android:id="@+id/ss" android:layout_width="match_parent" android:layout_height="match_parent"/>
Activity中使用
ProgressBarWebView webView=(ProgressBarWebView) findViewById(R.id.ss);
webView.loadUrl("http://www.baidu.com/");
三、最終效果


以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android 自定義View實現(xiàn)多節(jié)點進(jìn)度條功能
- Android自定義View實現(xiàn)水平帶數(shù)字百分比進(jìn)度條
- Android自定義View實現(xiàn)音頻播放圓形進(jìn)度條
- Android自定義View實現(xiàn)漸變色進(jìn)度條
- Android自定義View實現(xiàn)加載進(jìn)度條效果
- Android view自定義實現(xiàn)動態(tài)進(jìn)度條
- Android 自定義view和屬性動畫實現(xiàn)充電進(jìn)度條效果
- android 自定義view實現(xiàn)彩虹進(jìn)度條功能
相關(guān)文章
android編程判斷應(yīng)用是否具有某個權(quán)限的方法
這篇文章主要介紹了android編程判斷應(yīng)用是否具有某個權(quán)限的方法,涉及Android進(jìn)程操作及權(quán)限控制的相關(guān)使用技巧,需要的朋友可以參考下2015-10-10
Android實現(xiàn)簡單的下拉阻尼效應(yīng)示例代碼
下面小編就為大家分享一篇Android實現(xiàn)簡單的下拉阻尼效應(yīng)示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android中TextView顯示圓圈背景或設(shè)置圓角的方法
TextView顯示文本給用戶,并允許他們選擇編輯。TextView是一個完整的文本編輯器,但是其基本類配置為不允許編輯。下面這篇文章主要給大家介紹了關(guān)于Android中TextView顯示圓圈背景或設(shè)置圓角的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
Android IPC進(jìn)程間通信詳解最新AndroidStudio的AIDL操作)
這篇文章主要介紹了Android IPC進(jìn)程間通信的相關(guān)資料,需要的朋友可以參考下2016-09-09
往Android系統(tǒng)中添加服務(wù)的方法教程
最近因為平臺升級,需要在系統(tǒng)中添加一些服務(wù),所以將整個過程總結(jié)一下,下面這篇文章主要給大家介紹了往Android系統(tǒng)中添加服務(wù)的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05

