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í)代碼會報(bào)錯(cuò),所以我們新建一個(gè)子線程來執(zhí)行進(jìn)度條
在子程序中我們沒辦法對控件進(jìn)行操作,所以我們需要用到handler類,實(shí)現(xiàn)主線程和子線程之間的通信;
Handler的定義
主要接受子線程發(fā)送的數(shù)據(jù),并用此數(shù)據(jù)配合主線程更新UI。
當(dāng)應(yīng)用程序啟動(dòng)時(shí),Android首先會開啟一個(gè)主線程 (即UI線程),主線程管理界面中的UI控件,進(jìn)行事件分發(fā),比如說:點(diǎn)擊Button,Android系統(tǒng)會分發(fā)事件到Button上,來響應(yīng)你的操作。如果此時(shí)需要一個(gè)耗時(shí)的操作,例如: 聯(lián)網(wǎng)讀取數(shù)據(jù),或者讀取本地較大的一個(gè)文件的時(shí)候,你不能把這些操作放在主線程中,如果你放在主線程中的話,界面會出現(xiàn)假死現(xiàn)象,如果5秒鐘還沒有完成的話,會收到Android系統(tǒng)的一個(gè)錯(cuò)誤提示“強(qiáng)制關(guān)閉”。這個(gè)時(shí)候我們需要把這些耗時(shí)的操作,放在一個(gè)子線程中。
因?yàn)樽泳€程涉及到UI更新,Android主線程是線程不安全的,也就是說,更新UI只能在主線程中更新,子線程中操作是危險(xiǎn)的。這個(gè)時(shí)候,Handler就出現(xiàn)了。來解決這個(gè)復(fù)雜的問題,由于Handler運(yùn)行在主線程中(UI線程中), 它與子線程可以通過Message對象來傳遞數(shù)據(jù),這個(gè)時(shí)候,Handler就承擔(dān)著接受子線程傳過來的(子線程用sedMessage()方法傳遞Message對象,(里面包含數(shù)據(jù)),把這些消息放入主線程隊(duì)列中,配合主線程進(jìn)行更新UI。
以上所述是小編給大家介紹的Android ProgressBar直線進(jìn)度條的實(shí)例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(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ìn)度條顏色)
- Android ProgressBar進(jìn)度條和ProgressDialog進(jìn)度框的展示DEMO
- Android進(jìn)度條控件progressbar使用方法詳解
- Android progressbar實(shí)現(xiàn)帶底部指示器和文字的進(jìn)度條
- android實(shí)現(xiàn)簡單進(jìn)度條ProgressBar效果
相關(guān)文章
Android XML設(shè)置屏幕方向(android:screenOrientation)詳解
這篇文章主要介紹了Android XML設(shè)置屏幕方向(android:screenOrientation)詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04Flutter網(wǎng)絡(luò)請求Dio庫的使用及封裝詳解
本文主要介紹了Flutter網(wǎng)絡(luò)請求Dio庫的使用及封裝詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Android自定義相機(jī)Camera實(shí)現(xiàn)手動(dòng)對焦的方法示例
這篇文章主要介紹了Android自定義相機(jī)Camera實(shí)現(xiàn)手動(dòng)對焦的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06android網(wǎng)絡(luò)編程之a(chǎn)ndroid連接網(wǎng)絡(luò)的簡單示例代碼
這篇文章主要介紹了android連接網(wǎng)絡(luò)的簡單示例,需要的朋友可以參考下2014-04-04Android編程實(shí)現(xiàn)應(yīng)用獲取包名、版本號、權(quán)限等信息的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)應(yīng)用獲取包名、版本號、權(quán)限等信息的方法,涉及Android針對應(yīng)用相關(guān)信息的獲取操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-02-02Android 正則表達(dá)式驗(yàn)證手機(jī)號、姓名(包含少數(shù)民族)、身份證號
本篇文章主要介紹了Android 正則表達(dá)式驗(yàn)證手機(jī)號、姓名(包含少數(shù)民族)、身份證號的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04Android RefreshLayout實(shí)現(xiàn)下拉刷新布局
這篇文章主要為大家詳細(xì)介紹了Android RefreshLayout實(shí)現(xiàn)下拉刷新布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10