日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条

發(fā)布時(shí)間:2025/3/19 Android 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

場景

進(jìn)度條的常用場景:

通過SeekBar拖動(dòng)進(jìn)而更新ProgressBar進(jìn)度條,比如調(diào)整音量效果等。

模擬下載實(shí)現(xiàn)自動(dòng)更新進(jìn)度條。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號
霸道的程序猿
獲取編程相關(guān)電子書、教程推送與免費(fèi)下載。

實(shí)現(xiàn)

手動(dòng)控制進(jìn)度條

在布局文件xml中添加一個(gè)SeekBar與ProgressBar

??? <ProgressBarandroid:id="@+id/pb_test"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"style="@style/Widget.AppCompat.ProgressBar.Horizontal"/><SeekBarandroid:id="@+id/seekbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"/>

然后在Activity中聲明這兩個(gè)控件

??? private ProgressBar? progressBar;private SeekBar seekBar;

然后在onCreate方法中獲取這兩個(gè)控件

??????? progressBar = findViewById(R.id.pb_test);seekBar = findViewById(R.id.seekbar);

并設(shè)置seeBar的進(jìn)度改變的監(jiān)聽器以及重寫其方法

??????? seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {progressBar.setProgress(progress);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});

onProgressChanged方法就是其進(jìn)度改變的事件監(jiān)聽,將進(jìn)度條的進(jìn)度設(shè)置為seekBar的進(jìn)度

實(shí)現(xiàn)效果

?

自動(dòng)進(jìn)度條實(shí)現(xiàn)

在布局文件添加一個(gè)TextView用來顯示數(shù)字顯示的百分比,添加一個(gè)Button用來觸發(fā)下載操作

<?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"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".ProgressBarActivity"><TextViewandroid:id="@+id/tv_persent"android:layout_width="match_parent"android:layout_height="wrap_content"/><ProgressBarandroid:id="@+id/pb_test"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="5dp"style="@style/Widget.AppCompat.ProgressBar.Horizontal"/><SeekBarandroid:id="@+id/seekbar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"/><Buttonandroid:id="@+id/btn_download"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"android:text="下載"/> </LinearLayout>

然后在Activity中,在Button的點(diǎn)擊事件中

??????? button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {handler.sendEmptyMessage(1);}});thread.start();}});

新開一個(gè)進(jìn)程并啟動(dòng),新開的進(jìn)程與主進(jìn)程進(jìn)行通信使用新建的Handler對象,調(diào)用其sendEmptyMessage方法

發(fā)送一個(gè)空消息參數(shù)為一個(gè)int值,這里為1。

然后在Handler初始化時(shí)重寫其handlerMessage方法

使其每延遲200毫秒加一個(gè)進(jìn)度并更新TextView和ProgressBar的進(jìn)度顯示。

完整的activity的示例代碼

package com.badao.androidstudy;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.Button; import android.widget.ProgressBar; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast;public class ProgressBarActivity extends AppCompatActivity {private ProgressBar? progressBar;private SeekBar seekBar;private Button button;private TextView textView;private Handler handler;private int progress = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_progress_bar);progressBar = findViewById(R.id.pb_test);seekBar = findViewById(R.id.seekbar);button = findViewById(R.id.btn_download);textView = findViewById(R.id.tv_persent);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {progressBar.setProgress(progress);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});handler = new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 1:if(progress<100){progressBar.setProgress(progress);textView.setText(progress+"%");progress++;handler.sendEmptyMessageDelayed(1,200);}else{Toast.makeText(ProgressBarActivity.this,"下載完成",Toast.LENGTH_LONG).show();}break;}}};button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {handler.sendEmptyMessage(1);}});thread.start();}});} }

示例效果

?

?

?

總結(jié)

以上是生活随笔為你收集整理的Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。