android實(shí)現(xiàn)簡單進(jìn)度條ProgressBar效果
本文實(shí)例為大家分享了android實(shí)現(xiàn)簡單進(jìn)度條ProgressBar的具體代碼,供大家參考,具體內(nèi)容如下
記錄一下今天學(xué)習(xí)的進(jìn)度條ProgressBar
1、在布局文件中添加ProgressBar
<ProgressBar ? ? ? ? android:id="@+id/progressbar" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? style="@android:style/Widget.ProgressBar.Horizontal" ? ? ? ? android:max="100" ? ? ? ? android:layout_marginTop="150dp" ? ? ? ? />
其中**style=“@android:style/Widget.ProgressBar.Horizontal”**設(shè)置進(jìn)度條樣式為水平進(jìn)度條,否則默認(rèn)原型旋轉(zhuǎn)的進(jìn)度條;
max設(shè)置進(jìn)度條長度,這里設(shè)置為100。
2、java代碼:
聲明ProgressBar;int型的mprogress表示進(jìn)度條進(jìn)度;Handler對象處理子線程消息
通過id獲取布局中的ProgressBar;
progressBar=findViewById(R.id.progressbar);
用Handler模擬子線程耗時操作
mhandler=new Handler(){ ? ? ? ? ? ? @Override ? ? ? ? ? ? public void handleMessage(@NonNull Message msg) { ? ? ? ? ? ? ? ? super.handleMessage(msg); ? ? ? ? ? ? ? ? if(msg.what==0x111){ ? ? ? ? ? ? ? ? ? ? progressBar.setProgress(mprogress);//進(jìn)度條未完成時,更新進(jìn)度條 ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? Toast.makeText(ProgressActivity.this,"耗時操作完成",Toast.LENGTH_LONG).show(); ? ? ? ? ? ? ? ? ? ? progressBar.setVisibility(View.GONE);//設(shè)置進(jìn)度條消失 ? ? ? ? ? ?} ? ? ? ?} ? };
1、Handlerd需要重寫handleMessage()方法,參數(shù)為子線程傳來的msg.
2、msg.what==0x111表示消息是0x111,則進(jìn)度條未完成,此時需要通過 progressBar.setProgress(mprogress)來更新進(jìn)度條。
3、msg是其他時則表示進(jìn)度條完成,這里只彈出Toast,也可以進(jìn)行其他操作。
開啟子線程更新UI
new Thread(new Runnable() { ? ? ? ? ? ? @Override ? ? ? ? ? ? public void run() { ? ? ? ? ? ? ? ? while (true){ ? ? ? ? ? ? ? ? ? ? //進(jìn)度更新 ? ? ? ? ? ? ? ? ? ? mprogress=doWork(); ? ? ? ? ? ? ? ? ? ? Message message=new Message(); ? ? ? ? ? ? ? ? ? ? if(mprogress<100){ ? ? ? ? ? ? ? ? ? ? ? ? message.what=0x111;//進(jìn)度條未完成時的message設(shè)置為0x111 ? ? ? ? ? ? ? ? ? ? ? ? mhandler.sendMessage(message);//向handler發(fā)送消息 ? ? ? ? ? ? ? ? ? ? }else { ? ? ? ? ? ? ? ? ? ? ? ? message.what=0x110;//進(jìn)度條完成時的message設(shè)置為0x110 ? ? ? ? ? ? ? ? ? ? ? ? mhandler.sendMessage(message);//向handler發(fā)送消息 ? ? ? ? ? ? ? ? ? ? ? ? break;//進(jìn)度完成跳出循環(huán) ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? private int doWork(){ ? ? ? ? ? ? ? ? mprogress= (int) (mprogress+Math.random()*10); ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? Thread.sleep(200);//線程休息200ms ? ? ? ? ? ? ? ? } catch (InterruptedException e) { ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return mprogress; ? ? ? ? ? ? } ? ? ? ? }).start();
1、在子線程中通過doWork()方法模擬耗時操作
2、doWork()方法改變mprogress的值即可,用來模擬進(jìn)度條進(jìn)度的值
3、需要一個Message對象將消息返回給主線程,
4、當(dāng)mprogress<100即進(jìn)度條未完成時,設(shè)置message.what=0x111->對應(yīng)當(dāng)進(jìn)度條未完成時,給主線程發(fā)送的message是0x111。
當(dāng)mprogress>100即進(jìn)度條完成時,設(shè)置message.what=0x110->對應(yīng)當(dāng)進(jìn)度條完成時,給主線程發(fā)送的message是0x110。這里message.what的值可以隨意設(shè)置,不一定非要0x111,0x110。
5、 設(shè)置完message之后需要向主線程發(fā)送message,即mhandler.sendMessage(message);
以上運(yùn)行即可實(shí)現(xiàn)一個簡單進(jìn)度條。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android入門之彈出式對話框的實(shí)現(xiàn)
- Android入門之利用Spinner實(shí)現(xiàn)彈出選擇對話框
- Android對話框使用方法詳解
- Android自定義對話框的簡單實(shí)現(xiàn)
- 五分了解Android?Progress?Bar進(jìn)度條加載
- Android開發(fā)基礎(chǔ)使用ProgressBar加載進(jìn)度條示例
- Android自定義View實(shí)現(xiàn)進(jìn)度條動畫
- Android實(shí)現(xiàn)簡單實(shí)用的垂直進(jìn)度條
- Jetpack Compose實(shí)現(xiàn)對話框和進(jìn)度條實(shí)例解析
相關(guān)文章
Kotlin基礎(chǔ)學(xué)習(xí)之Deprecated與Suppress注解使用
這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之Deprecated與Suppress注解使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Kotlin具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Android實(shí)現(xiàn)側(cè)滑菜單DrawerLayout
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)側(cè)滑菜單DrawerLayout,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05Android實(shí)現(xiàn)可拖拽的GridView效果長按可拖拽刪除數(shù)據(jù)源
這篇文章主要介紹了Android實(shí)現(xiàn)可拖拽的GridView效果長按可拖拽刪除數(shù)據(jù)源,要實(shí)現(xiàn)的基本功能是長按,移到垃圾桶,刪除數(shù)據(jù),需要的朋友可以參考下2017-12-12Android使用Handler實(shí)現(xiàn)打地鼠游戲
這篇文章主要為大家詳細(xì)介紹了Android使用Handler實(shí)現(xiàn)打地鼠游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06Android UI設(shè)計(jì)與開發(fā)之ViewPager介紹和簡單實(shí)現(xiàn)引導(dǎo)界面
這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開發(fā)之ViewPager介紹和簡單實(shí)現(xiàn)引導(dǎo)界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Android獲取當(dāng)前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法
今天小編就為大家分享一篇關(guān)于Android獲取當(dāng)前應(yīng)用分配的最大內(nèi)存和目前使用內(nèi)存的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02Android編程錄音工具類RecorderUtil定義與用法示例
這篇文章主要介紹了Android編程錄音工具類RecorderUtil定義與用法,結(jié)合實(shí)例形式分析了Android錄音工具類實(shí)現(xiàn)開始錄音、停止錄音、取消錄音、獲取錄音信息等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01