Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条
生活随笔
收集整理的這篇文章主要介紹了
Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景
進度條的常用場景:
通過SeekBar拖動進而更新ProgressBar進度條,比如調整音量效果等。
模擬下載實現自動更新進度條。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
手動控制進度條
在布局文件xml中添加一個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中聲明這兩個控件
??? private ProgressBar? progressBar;private SeekBar seekBar;然后在onCreate方法中獲取這兩個控件
??????? progressBar = findViewById(R.id.pb_test);seekBar = findViewById(R.id.seekbar);并設置seeBar的進度改變的監聽器以及重寫其方法
??????? 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方法就是其進度改變的事件監聽,將進度條的進度設置為seekBar的進度
實現效果
?
自動進度條實現
在布局文件添加一個TextView用來顯示數字顯示的百分比,添加一個Button用來觸發下載操作
<?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的點擊事件中
??????? button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {handler.sendEmptyMessage(1);}});thread.start();}});新開一個進程并啟動,新開的進程與主進程進行通信使用新建的Handler對象,調用其sendEmptyMessage方法
發送一個空消息參數為一個int值,這里為1。
然后在Handler初始化時重寫其handlerMessage方法
使其每延遲200毫秒加一個進度并更新TextView和ProgressBar的進度顯示。
完整的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();}});} }示例效果
?
?
?
總結
以上是生活随笔為你收集整理的Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中实现调用摄像头拍照并显示
- 下一篇: AndroidStudio中提示:Cou