【问题标题】:How to define gradient to circular progressBar如何将渐变定义为圆形progressBar
【发布时间】:2021-02-06 11:08:00
【问题描述】:

我在布局中添加了一个进度条,如下所示,我还为其添加了颜色,效果很好。

 <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:indeterminate="true"
        android:indeterminateTintMode="src_atop"
        android:indeterminateTint="@color/color"
        android:layout_gravity="center_vertical|center_horizontal"
        android:visibility="visible"
 />

但我需要在其上添加渐变色。我在颜色文件夹中添加了一个渐变,如下所示。

<gradient android:type="linear"
    android:angle="0"
    android:startColor="#dc0336"
    android:endColor="#ff7f00"
    xmlns:android="http://schemas.android.com/apk/res/android" />

然后我将此颜色分配给Progressbar

 android:indeterminateTint="@color/gradientColor"

但这不起作用,我需要知道一种向progressBar添加渐变的方法

【问题讨论】:

    标签: android android-layout android-constraintlayout android-progressbar


    【解决方案1】:

    您应该使用android:progressDrawable 而不是android:indeterminateTint

    您的代码应如下所示:

     <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:indeterminate="true"
            android:indeterminateTintMode="src_atop"
            android:progressDrawable="@drawable/gradientDrawable"
            android:layout_gravity="center_vertical|center_horizontal"
            android:visibility="visible"
     />
    

    使用以下作为渐变 Drawable。将该文件命名为 gradientDrawable.xml 并将其放在您的可绘制目录下。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:innerRadiusRatio="3.5"
        android:shape="ring"
        android:thickness="2.5dp"
        android:useLevel="false">
        <gradient
            android:angle="0"
            android:endColor="#ff7f00"
            android:startColor="#dc0336"
            android:type="linear" />
    </shape>
    

    我已经测试了你的渐变,它看起来像这样:

    【讨论】:

    • 我尝试了该代码,但它显示了水平进度条
    • 很奇怪,因为相同的代码对我有用。 @dev90 你试过用 style="?android:attr/progressBarStyle" 替换 style="?android:attr/progressBarStyleHorizo​​ntal" 吗?
    • 这对我不起作用。当我按原样使用解决方案时 - 我看到水平进度条。当我将样式更改为 style="?android:attr/progressBarStyle" 时,它是圆形的,但没有渐变。当我删除 android:indeterminate="true" 和 android:indeterminateTintMode="src_atop" 时,我看到了正确的可绘制对象,但没有任何动画。
    【解决方案2】:

    这是一个迟到的答案,但我认为这会对其他人有所帮助。只需尝试遵循代码即可。

    drawable/loading_progressbar

    <?xml version="1.0" encoding="utf-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="1440">
        <shape
            android:innerRadiusRatio="3"
            android:shape="ring"
            android:thicknessRatio="10"
            android:useLevel="false">
            <size
                android:width="60dp"
                android:height="60dp" />
    
            <gradient
                android:centerColor="#b43787"
                android:centerY="0.50"
                android:endColor="#7036a3"
                android:startColor="#f0376f"
                android:type="sweep"
                android:useLevel="false" />
        </shape>
    
    </rotate>
    

    activity_main.xml

    <ProgressBar
            android:id="@+id/loading_progress"
            android:layout_width="130dp"
            android:layout_height="130dp"
            android:indeterminateDrawable="@drawable/loading_progressbar"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            />
    

    结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多