【Kotlin】使用 ProgressBar 的样式属性来实现圆形进度条,进度使用gradient渐变效果

Android ProgressBar 默认提供了水平和圆形两种进度条,水平进度条通过 ProgressBar 控件实现,而圆形进度条通过 ProgressDialog 控件实现。如果想要将 ProgressBar 控件设置为圆形进度条,可以使用 ProgressBar 的样式属性来实现。

首先,在布局文件中添加一个 ProgressBar 控件,并设置其样式为 @style/Widget.AppCompat.ProgressBar

<ProgressBar
    android:id="@+id/progressBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/Widget.AppCompat.ProgressBar"
    android:indeterminate="true" />

在上面的代码中,我们设置了 ProgressBar 的样式为 @style/Widget.AppCompat.ProgressBar,并将 indeterminate 属性设置为 true,表示使用不确定模式。

然后,在 styles.xml 文件中,定义一个名为 Widget.AppCompat.ProgressBar 的样式,将其父样式设置为 Widget.AppCompat.ProgressBar.Horizontal,并将其样式属性 android:indeterminateDrawable 设置为一个圆形进度条的 Drawable:

<style name="Widget.AppCompat.ProgressBar" parent="Widget.AppCompat.ProgressBar.Horizontal">
    <item name="android:indeterminateDrawable">@drawable/circular_progress_bar</item>
</style>

在上面的代码中,我们定义了一个名为 Widget.AppCompat.ProgressBar 的样式,将其父样式设置为 Widget.AppCompat.ProgressBar.Horizontal,并将其样式属性 android:indeterminateDrawable 设置为一个圆形进度条的 Drawable。

最后,在 drawable 文件夹中创建一个名为 circular_progress_bar.xml 的 Drawable 文件,其中定义一个圆形进度条的形状和颜色:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" >

    <shape
        android:innerRadiusRatio="3"
        android:shape="ring"
        android:thicknessRatio="8"
        android:useLevel="true" >

        <size
            android:width="48dp"
            android:height="48dp" />

        <gradient
            android:centerColor="#ff0000"
            android:endColor="#00ff00"
            android:startColor="#0000ff"
            android:type="sweep"
            android:useLevel="false" />
    </shape>

</rotate>

在上面的代码中,我们首先使用 <rotate> 标签将圆形进度条旋转了 360 度,然后使用 <shape> 标签定义了一个圆环形状,并设置了其内外半径比例、厚度比例、大小等属性。最后,使用 <gradient> 标签定义圆环的颜色为一个渐变色。

运行代码后,将会显示一个圆形进度条,其颜色为一个渐变色。可以修改 circular_progress_bar.xml 文件中的颜色和大小等属性来改变进度条的外观。

设置进度

在 Kotlin 中,可以通过调用 ProgressBar 控件的 setProgress() 方法来设置进度,例如:

val progressBar = findViewById<ProgressBar>(R.id.progressBar)
progressBar.progress = 50 // 设置进度为 50

在上面的代码中,我们首先获取了一个名为 progressBarProgressBar 控件的实例,然后调用了其 setProgress() 方法,将进度设置为 50。

为了更好地控制进度条的动画效果,也可以使用 ObjectAnimator 类来实现进度条的动画效果,例如:

val progressBar = findViewById<ProgressBar>(R.id.progressBar)
val animator = ObjectAnimator.ofInt(progressBar, "progress", 0, 100)
animator.duration = 1000 // 动画持续时间为 1 秒
animator.start() // 开始动画

在上面的代码中,我们首先获取了一个名为 progressBarProgressBar 控件的实例,然后创建了一个 ObjectAnimator 对象,将其目标对象设置为 progressBar,属性名设置为 "progress",起始值为 0,结束值为 100。然后,我们设置了动画的持续时间为 1 秒,并调用了 start() 方法来启动动画。

使用 ObjectAnimator 类可以实现更加灵活的动画效果,例如设置插值器、动画监听器等。可以根据具体的需求来使用不同的动画效果。

猜你喜欢

转载自blog.csdn.net/gao511147456/article/details/131314066