Android中ProgressBar的使用-經過Handler與Message實現進度條顯示

場景

進度條效果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(); //啓動進程
    }
}

 
相關文章
相關標籤/搜索