進度條效果java
注: android
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公衆號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。編程
將佈局改成相對佈局,而後添加一個ProgressBar,並添加id屬性。app
而後經過dom
android:max="100"
設置進度條最大值ide
經過佈局
android:layout_alignParentBottom="true" android:layout_marginBottom="50dp"
設置其位置在底部並設置外邊距this
關於進度條的樣式,參考以下spa
這裏使用的進度條樣式是.net
style="?android:attr/progressBarStyleHorizontal"
完整xml示例代碼
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ProgressBarActivity"> <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:max="100" android:layout_alignParentBottom="true" android:layout_marginBottom="50dp" android:id="@+id/progressBar" /> </RelativeLayout>
而後來到Activity
要實現進度條的簡單流程以下
首先在Activity中聲明進度條對象、進度值、Handler對象。
關於Hnadler對象,由於Android不支持在主線程中更新UI控件,因此提供了Handler對象。
首先經過id獲取進度條對象,而後實例化Handler,須要重寫其handleMessage方法
在handleMessage方法中,經過msg的標識來判斷是否完成進度條的加載。
而後須要新開一個線程,在線程中隨機給進度條添加進度值,而後判斷是否到100,進而報告不一樣的進度和標識變量。
完整示例代碼
package com.badao.relativelayouttest; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; import java.util.prefs.PreferenceChangeEvent; public class ProgressBarActivity extends AppCompatActivity { private ProgressBar progressBar; private int mProgress = 0; private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progress_bar); //獲取進度條控件 progressBar = (ProgressBar) findViewById(R.id.progressBar); //Android 不支持在主線程中更新UI組件 因此提供了Handler對象 mHandler = new Handler(){ //經過消息代碼msg進行區分是否加載完成 @Override public void handleMessage(@NonNull Message msg) { if(msg.what ==0x111) { //給進度條賦值 progressBar.setProgress(mProgress); }else { Toast.makeText(ProgressBarActivity.this,"加載完成",Toast.LENGTH_SHORT).show(); progressBar.setVisibility(View.GONE); } } }; //新建一個線程 new Thread(new Runnable() { @Override public void run() { while (true) { //具體執行的方法的進度,返回進度 mProgress = doWork(); //定義一個標識,標識進度條是否加載完成 Message message = new Message(); if(mProgress <100) { //表示還沒加載到100 則向進度條報告進度 message.what = 0x111; mHandler.sendMessage(message); }else { //表示此時已經加載完成,向Handler發送消息 並跳出循環 message.what =0x110; mHandler.sendMessage(message); break; } } } //具體執行 並返回進度的方法 private int doWork() { //進度條隨機加進度 mProgress +=Math.random()*10; try { //進程休眠0.5秒 Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } return mProgress; } }).start(); //啓動進程 } }