Android開(kāi)發(fā)之進(jìn)度條ProgressBar

說(shuō)明

ProgressBar一般用于顯示一個(gè)過(guò)程,例如數(shù)據(jù)加載過(guò)程,文件下載進(jìn)度,音樂(lè)播放進(jìn)度等。

默認(rèn)形式ProgressBar

默認(rèn)方式下,ProgressBar顯示為圓形進(jìn)度,循環(huán)轉(zhuǎn)圈,不顯示具體的進(jìn)度值,控制其顯隱藏即可,如下


默認(rèn)

適用于界面加載

   //xml中
    <ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

   //代碼中控制顯隱藏
   mProgressBar = (ProgressBar) findViewById(R.id.progress_bar_main);
   mProgressBar.setVisibility(View.VISIBLE);

橫向ProgressBar

橫向帶進(jìn)度的進(jìn)度條,通過(guò)設(shè)置ProgressBar的Style為style="?android:attr/progressBarStyleHorizontal"


image.png

max屬性指定進(jìn)度條總進(jìn)度值,progress設(shè)置當(dāng)前進(jìn)度值,也可以說(shuō)是初始進(jìn)度值

    //xml中
   <ProgressBar
    android:id="@+id/progress_bar_h"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="85dp"
    android:layout_height="10dp"
    android:layout_gravity="center"
    android:max="100"
    android:progress="50"
    />

設(shè)進(jìn)度條背景

系統(tǒng)自帶的進(jìn)度條的顏色比較單調(diào),實(shí)際開(kāi)發(fā)中使用較少,可以自定義進(jìn)度條背景,新建一個(gè)progressbar_bg.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!--  設(shè)置背景色  -->
<item android:id="@android:id/background"
    android:drawable="@mipmap/feed_grow_progress_bar">
</item>

<!--  設(shè)置進(jìn)度條顏色  -->
<item android:id="@android:id/progress">
    <clip>
        <shape>

            <gradient
                android:endColor="#fff000"
                android:startColor="#fff000" />
        </shape>
    </clip>
</item>
</layer-list>

gradient可以設(shè)置進(jìn)度條的漸變色, android:endColor和 android:startColor可以設(shè)置漸變開(kāi)始和結(jié)束的顏色。定義完成以后,便可以使用

<ProgressBar
    android:id="@+id/progress_bar_healthy"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="85dp"
    android:layout_height="10dp"
    android:layout_marginTop="20dp"
    android:layout_gravity="center"
    android:max="100"
    android:progress="50"
    android:progressDrawable="@drawable/progressbar_bg"
    />

效果圖,這里設(shè)置了黃色矩形背景,及黃色進(jìn)度條


image.png

動(dòng)態(tài)設(shè)置

在音樂(lè)進(jìn)度,網(wǎng)絡(luò)下載時(shí),需動(dòng)態(tài)加載進(jìn)度條,默認(rèn)情況下,設(shè)置進(jìn)度條,使用setProgress()即可。但有時(shí)除了動(dòng)態(tài)設(shè)置進(jìn)度,仍需要?jiǎng)討B(tài)設(shè)置進(jìn)度條顏色

  private void setElectircProgress(int i, int color) {
    ClipDrawable drawable = new ClipDrawable(new ColorDrawable(color), Gravity.LEFT, ClipDrawable.HORIZONTAL);
    progressBarElectric.setProgressDrawable(drawable);
    progressBarElectric.setProgress(i);
}

音樂(lè)播放實(shí)例

通過(guò)MediaPlayer 播放音樂(lè)并獲取進(jìn)度,設(shè)置進(jìn)度


image.png
musicProgressBar = (ProgressBar) findViewById(R.id.progress_bar_music);

    if (mPlayer != null) {
        mPlayer.release();
        mPlayer = null;
    }
    mPlayer = MediaPlayer.create(this, R.raw.summer);
    mPlayer.start();
    musicProgressBar.setMax(mPlayer.getDuration());
    if (timer != null) {
        timer = null;
        timerTask = null;
    }
    timer = new Timer();
    timerTask = new TimerTask() {
        @Override
        public void run() {
            if (mPlayer != null) {
                if (mPlayer.isPlaying()) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            musicProgressBar.setProgress(mPlayer.getCurrentPosition());
                        }
                    });
                }
            }
        }
    };
    timer.schedule(timerTask, 0, 1000);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容