progressbar

顾名思义,就是进度条。

<?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:id="@+id/lbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:max="100"
            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>
主界面
<?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>
my_bar.xml
package com.example.processbar

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Message
import android.widget.ProgressBar
import java.lang.ref.WeakReference

class MainActivity : AppCompatActivity() {

    // 该程序模拟填充长度为100的数组
    private val data = IntArray(100)
    private var hasData = 0
    // 记录ProgressBar的完成进度
    internal var status = 0
    private var bar: ProgressBar? = null
    private var bar2: ProgressBar? = null
    private var bar3: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!!
                activity.get()?.bar3?.progress=activity.get()?.status!!
            }
        }
    }
    // 创建一个负责更新的进度的Handler
    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)
        bar3 = findViewById<ProgressBar>(R.id.lbar)
        // 启动线程来执行任务
        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
    }
}
主程序
原文地址:https://www.cnblogs.com/superxuezhazha/p/11497753.html