实现类似 “更新中” 的水平进度条按钮效果
如上图所示
activity_test3.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#000000"tools:context=".MainActivity"><ProgressBarandroid:id="@+id/progress_bar"style="@android:style/Widget.ProgressBar.Horizontal"android:layout_width="640dp"android:layout_height="108dp"android:layout_centerInParent="true"android:indeterminate="false"android:max="100"android:progress="0"android:progressDrawable="@drawable/progress_bar_style" /><TextViewandroid:id="@+id/btn_update"android:layout_width="640dp"android:layout_height="108dp"android:layout_centerInParent="true"android:text="更新中"android:textColor="#ffffffff"android:gravity="center"android:textSize="40sp" /></RelativeLayout>
TestActivity3.java
package com.example.myapplicationimport android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivityclass TestActivity3 : AppCompatActivity() {private lateinit var btnUpdate: TextViewprivate lateinit var progressBar: ProgressBarprivate val handler = Handler(Looper.getMainLooper())private var progress = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_test3)btnUpdate = findViewById(R.id.btn_update)progressBar = findViewById(R.id.progress_bar)btnUpdate.setOnClickListener {Thread {while (progress < 100) {progress += 1try {Thread.sleep(100)} catch (e: InterruptedException) {e.printStackTrace()}handler.post {progressBar.progress = progress}}}.start()}}
}
progress_bar_style.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@android:id/background"><shape><corners android:radius="54dp" /><solid android:color="#1AFFFFFF" /></shape></item><item android:id="@android:id/progress"><clip><shape><corners android:radius="54dp" /><solid android:color="#FF267AFF" /></shape></clip></item>
</layer-list>