MainActivity.kt
package com.example.progressbartest
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.widget.ProgressBar
import androidx.appcompat.app.AppCompatActivity
import java.lang.ref.WeakReference
class MainActivity : AppCompatActivity() {
private val data = IntArray(100)
private var hasData = 0
// 记录ProgressBar当前进度
internal var status = 0
private var bar : ProgressBar? = null
private var bar2 : ProgressBar? = null
class MyHandler(private val activity:WeakReference<MainActivity>) : Handler()
{
override fun handleMessage(msg: Message) {
if (msg.what == 0X111)
{
activity.get()?.bar?.progress = activity.get()?.status!!
activity.get()?.bar2?.progress = activity.get()?.status!!
}
}
}
internal val mHandler = MyHandler(WeakReference(this))
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
bar = findViewById(R.id.bar)
bar2 = findViewById(R.id.bar2)
// 启动线程来执行任务
object : Thread()
{
override fun run() {
while (status < 100) {
// 获取耗时操作的完成百分比
status = doWork()
//发送消息
mHandler.sendEmptyMessage(0x111)
}
}
}.start()
}
// 模拟一个耗时的操作
fun doWork() : Int
{
data[hasData++] = (Math.random() * 100).toInt()
Thread.sleep(100)
return hasData
}
}
acitivity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 定义一个大环形进度条 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"/>
<!-- 定义一个中等大小的环形进度条 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- 定义一个小环形进度条 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="任务完成的进度"/>
<!-- 定义一个水平进度条 -->
<ProgressBar
android:id="@+id/bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
style="@android:style/Widget.ProgressBar.Horizontal"/>
<!-- 定义一个水平进度条,并改变轨道外观 -->
<ProgressBar
android:id="@+id/bar2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progressDrawable="@drawable/my_bar"
style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>
my_bar.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义轨道的背景 -->
<item
android:id="@android:id/background"
android:drawable="@drawable/no" />
<!-- 定义轨道上已完成部分的样式 -->
<item
android:id="@android:id/progress"
android:drawable="@drawable/ok" />
</layer-list>
效果