圆角进度条?

Geo*_*iev 50 android android-progressbar android-drawable

我正在努力实现这个进度条设计: 在此输入图像描述

我现有的代码产生了这个: 在此输入图像描述

这是代码:

<item android:id="@android:id/background">
    <shape>
        <corners android:radius="8dp"/>
        <solid android:color="@color/dirtyWhite"/>
    </shape>
</item>

<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="8dp"/>
            <solid android:color="@color/colorPrimaryDark"/>
        </shape>
    </clip>
</item>
Run Code Online (Sandbox Code Playgroud)

我的进度条:

 <ProgressBar
            android:id="@+id/activeProgress"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:progress="10"
            android:progressDrawable="@drawable/rounded_corners_progress_bar"/>
Run Code Online (Sandbox Code Playgroud)

我尝试<size><shape>in 上添加属性<clip以使进度形状稍微小一点,但它不起作用.此外,进度条是平的,我想按照设计弯曲.我需要改变才能实现设计?

Eya*_*ran 113

如何使进度形状变小?

您需要为进度项添加一点填充,如下所示:

<item android:id="@android:id/progress"
    android:top="2dp"
    android:bottom="2dp"
    android:left="2dp"
    android:right="2dp">
Run Code Online (Sandbox Code Playgroud)

如何根据设计使进度条弯曲?

<clip></clip>,替换元素<scale android:scaleWidth="100%"></scale>.这将使形状在其生长时保持其形状 - 而不是切断.不幸的是,它在开始时会产生一些不必要的视觉效果 - 因为形状角落没有足够的空间来绘制.但对大多数情况来说,这可能已经足够了.

完整代码:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@android:id/background">
    <shape>
        <corners android:radius="8dp"/>
        <solid android:color="@color/dirtyWhite"/>
    </shape>
 </item>

 <item android:id="@android:id/progress"
    android:top="1dp"
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp">

    <scale android:scaleWidth="100%">
        <shape>
            <corners android:radius="8dp"/>
            <solid android:color="@color/colorPrimaryDark"/>
        </shape>
    </scale>
 </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

  • 在我的例子中,带有 `android:scaleWidth="100%"` 的 `scale` 可以用圆角显示它。非常感谢 (8认同)
  • @habibullah使用原生ProgressBar和Layer-List是非常有限的.您可以轻松实现自定义进度条以满足您的需求.例如,如果您有纯色背景 - 只需使用前景9路径来隐藏除进度之外的所有内容.如果您要定位较新的Android版本,则只需使用内置的掩码支持(旧版本不支持).另一个选择是使用库,这可能对你有用:https://github.com/akexorcist/Android-RoundCornerProgressBar.如果您仍然遇到问题,请发布一个新问题.干杯. (3认同)

Gab*_*tti 33

通过材料组件库,您可以使用LinearProgressIndicatorapp:trackCornerRadius属性。
就像是:

    <com.google.android.material.progressindicator.LinearProgressIndicator
        android:indeterminate="true"
        app:trackThickness="xxdp"
        app:trackCornerRadius="xdp"/>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

它也适用于删除android:indeterminate="true"或使用的确定进度指示器android:indeterminate="false"

注意:它至少需要版本1.3.0.

  • @Arunachalamk LinearProgressIndicator [已引入](https://github.com/material-components/material-components-android/blob/1.3.0-alpha04/lib/java/com/google/android/material/progressindicator/LinearProgressIndicator。 java) 与 **1.3.0-alpha04**,目前最新的 alpha 版本。 (2认同)
  • 如果您不了解此视图,则很难获得不确定的圆形水平动画(如本机动画)。谢谢!!!!! (2认同)

Coo*_*ind 10

感谢 Georgi Koemdzhiev 提出了一个很好的问题和图片。对于那些想要与他相似的人,请执行以下操作。

1) 为ProgressBar.

progress_bar_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <corners android:radius="3dp" />
    <stroke android:color="@color/white" android:width="1dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

2) 为ProgressBar.

Curved_progress_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">
        <shape>
            <corners android:radius="2dp" />
            <solid android:color="@color/transparent" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="2dp" />
                <solid android:color="#ffff00" />
            </shape>
        </clip>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

3) 在布局文件中添加ProgressBar.

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="6dp"
    android:layout_marginStart="20dp"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="20dp"
    android:background="@drawable/progress_bar_background"
    >

    <ProgressBar
        android:id="@+id/progress_bar"
        style="@style/Widget.AppCompat.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:layout_margin="1dp"
        android:indeterminate="false"
        android:progressDrawable="@drawable/curved_progress_bar"
        />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)


小智 6

<com.google.android.material.progressindicator.LinearProgressIndicator
                android:id="@+id/pb_team2"
                android:layout_width="0dp"
                android:layout_height="8dp"
                android:layout_marginStart="55dp"
                android:layout_marginEnd="15dp"
                app:trackColor="#E0E0E0"
                app:trackCornerRadius="6dp"
                app:trackThickness="8dp"
                android:progress="2"
                app:indicatorColor="@color/red"
                android:scaleX="-1"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/tv_versus"
                app:layout_constraintTop_toBottomOf="@id/tv_team2_score" />
Run Code Online (Sandbox Code Playgroud)


Rav*_*S V 5

代码产生以下进度条
您可以实现内部进度颜色、边框颜色、空进度和透明颜色的进度条。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape>
        <corners android:radius="15dip" />
        <stroke android:width="1dp" android:color="@color/black" />
    </shape>
</item>

<item android:id="@android:id/secondaryProgress">
    <clip>
        <shape>
            <corners android:radius="5dip" />
            <gradient
                android:startColor="@color/black"
                android:centerColor="@color/trans"
                android:centerY="0.75"
                android:endColor="@color/black"
                android:angle="270"

                />
        </shape>
    </clip>
 </item>


 <item
    android:id="@android:id/progress"
    >
    <clip>
        <shape>
            <corners
                android:radius="5dip" />
            <gradient
                android:startColor="@color/black"
                android:endColor="@color/black"
                android:angle="270" />
        </shape>
    </clip>
 </item>
 </layer-list>
Run Code Online (Sandbox Code Playgroud)