Android ProgressBar直線進(jìn)度條的實(shí)例代碼
直線進(jìn)度條效果圖:
點(diǎn)擊下載后的效果圖:
布局xml文件:
empty
Java代碼:
package com.example.android_rogressbar; import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private ProgressBar pb_progress_bar; private TextView tv_main_text; private ImageView iv_main_image; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //根據(jù)ID獲取控件 pb_progress_bar = (ProgressBar) findViewById(R.id.pb_progress_bar); tv_main_text = (TextView) findViewById(R.id.tv_main_text); } //下載的方法 public void download(View view){ //啟動(dòng)線程 new MyThread().start(); } Handler handler=new Handler(){ //接收消息,用于更新UI界面 @Override public void handleMessage(Message msg) { super.handleMessage(msg); int i=msg.what; tv_main_text.setText(i+""); } }; class MyThread extends Thread{ @Override public void run() { super.run(); for (int i = 0; i <= 100; i++) { pb_progress_bar.setProgress(i); //在子線程中發(fā)送消息 handler.sendEmptyMessage(i); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
ProgressBar.java
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.android_rogressbar.MainActivity"> <!--style:設(shè)置進(jìn)度條的樣式,這里為直線進(jìn)度條--> <ProgressBar style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/pb_progress_bar" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_main_text" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下載" android:onClick="download" /> </LinearLayout>
因?yàn)橹骶€程執(zhí)行耗時(shí)代碼會(huì)報(bào)錯(cuò),所以我們新建一個(gè)子線程來(lái)執(zhí)行進(jìn)度條
在子程序中我們沒(méi)辦法對(duì)控件進(jìn)行操作,所以我們需要用到handler類(lèi),實(shí)現(xiàn)主線程和子線程之間的通信;
Handler的定義
主要接受子線程發(fā)送的數(shù)據(jù),并用此數(shù)據(jù)配合主線程更新UI。
當(dāng)應(yīng)用程序啟動(dòng)時(shí),Android首先會(huì)開(kāi)啟一個(gè)主線程 (即UI線程),主線程管理界面中的UI控件,進(jìn)行事件分發(fā),比如說(shuō):點(diǎn)擊Button,Android系統(tǒng)會(huì)分發(fā)事件到Button上,來(lái)響應(yīng)你的操作。如果此時(shí)需要一個(gè)耗時(shí)的操作,例如: 聯(lián)網(wǎng)讀取數(shù)據(jù),或者讀取本地較大的一個(gè)文件的時(shí)候,你不能把這些操作放在主線程中,如果你放在主線程中的話,界面會(huì)出現(xiàn)假死現(xiàn)象,如果5秒鐘還沒(méi)有完成的話,會(huì)收到Android系統(tǒng)的一個(gè)錯(cuò)誤提示“強(qiáng)制關(guān)閉”。這個(gè)時(shí)候我們需要把這些耗時(shí)的操作,放在一個(gè)子線程中。
因?yàn)樽泳€程涉及到UI更新,Android主線程是線程不安全的,也就是說(shuō),更新UI只能在主線程中更新,子線程中操作是危險(xiǎn)的。這個(gè)時(shí)候,Handler就出現(xiàn)了。來(lái)解決這個(gè)復(fù)雜的問(wèn)題,由于Handler運(yùn)行在主線程中(UI線程中), 它與子線程可以通過(guò)Message對(duì)象來(lái)傳遞數(shù)據(jù),這個(gè)時(shí)候,Handler就承擔(dān)著接受子線程傳過(guò)來(lái)的(子線程用sedMessage()方法傳遞Message對(duì)象,(里面包含數(shù)據(jù)),把這些消息放入主線程隊(duì)列中,配合主線程進(jìn)行更新UI。
以上所述是小編給大家介紹的Android ProgressBar直線進(jìn)度條的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android編程之ProgressBar圓形進(jìn)度條顏色設(shè)置方法
- android ListView和ProgressBar(進(jìn)度條控件)的使用方法
- Android實(shí)現(xiàn)進(jìn)度條(ProgressBar)的功能與用法
- Android三種方式實(shí)現(xiàn)ProgressBar自定義圓形進(jìn)度條
- Android ProgressBar進(jìn)度條使用詳解
- Android編程實(shí)現(xiàn)自定義ProgressBar樣式示例(背景色及一級(jí)、二級(jí)進(jìn)度條顏色)
- Android ProgressBar進(jìn)度條和ProgressDialog進(jìn)度框的展示DEMO
- Android進(jìn)度條控件progressbar使用方法詳解
- Android progressbar實(shí)現(xiàn)帶底部指示器和文字的進(jìn)度條
- android實(shí)現(xiàn)簡(jiǎn)單進(jìn)度條ProgressBar效果
相關(guān)文章
kotlin使用Dagger2的過(guò)程全紀(jì)錄
Dagger2是一款基于Java注解,在編譯階段完成依賴注入的開(kāi)源庫(kù),主要用于模塊間解耦,方便進(jìn)行測(cè)試。下面這篇文章主要給大家介紹了關(guān)于kotlin使用Dagger2的過(guò)程的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03Android XML設(shè)置屏幕方向(android:screenOrientation)詳解
這篇文章主要介紹了Android XML設(shè)置屏幕方向(android:screenOrientation)詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04Flutter網(wǎng)絡(luò)請(qǐng)求Dio庫(kù)的使用及封裝詳解
本文主要介紹了Flutter網(wǎng)絡(luò)請(qǐng)求Dio庫(kù)的使用及封裝詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Android自定義相機(jī)Camera實(shí)現(xiàn)手動(dòng)對(duì)焦的方法示例
這篇文章主要介紹了Android自定義相機(jī)Camera實(shí)現(xiàn)手動(dòng)對(duì)焦的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Android編程開(kāi)發(fā)錄音和播放錄音簡(jiǎn)單示例
這篇文章主要介紹了Android編程開(kāi)發(fā)錄音和播放錄音的方法,結(jié)合實(shí)例形式分析了Android多媒體開(kāi)發(fā)中音頻操作的相關(guān)技巧,需要的朋友可以參考下2016-08-08android網(wǎng)絡(luò)編程之a(chǎn)ndroid連接網(wǎng)絡(luò)的簡(jiǎn)單示例代碼
這篇文章主要介紹了android連接網(wǎng)絡(luò)的簡(jiǎn)單示例,需要的朋友可以參考下2014-04-04Android編程實(shí)現(xiàn)應(yīng)用獲取包名、版本號(hào)、權(quán)限等信息的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)應(yīng)用獲取包名、版本號(hào)、權(quán)限等信息的方法,涉及Android針對(duì)應(yīng)用相關(guān)信息的獲取操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-02-02Android 正則表達(dá)式驗(yàn)證手機(jī)號(hào)、姓名(包含少數(shù)民族)、身份證號(hào)
本篇文章主要介紹了Android 正則表達(dá)式驗(yàn)證手機(jī)號(hào)、姓名(包含少數(shù)民族)、身份證號(hào)的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04實(shí)例詳解Android 獲取短信會(huì)話列表
本文通過(guò)實(shí)例詳解android獲取短信會(huì)話列表的全部?jī)?nèi)容,涉及到android獲取短信列表的相關(guān)知識(shí),對(duì)android會(huì)話列表相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12Android RefreshLayout實(shí)現(xiàn)下拉刷新布局
這篇文章主要為大家詳細(xì)介紹了Android RefreshLayout實(shí)現(xiàn)下拉刷新布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10