Android 自定义进度条操作

Android custom Progress Bar manipulation

我在 Android 中使用自定义进度条时遇到了一些困难。也就是说,我有两个正确的自定义 ProgressBar 的 .xml 描述。 他们在这里:

  1. custom_progress_bar_horizontal.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--  @author : @ 
    
    -->
    <layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@android:id/background">
        <shape>
            <corners
                android:radius="0dip" />
            <stroke
                android:width="1dp"
                android:color="#ff000000" />
            <gradient
                android:startColor="#ffEEEEEE"
                android:centerColor="#ffEEEEEE"
                android:centerY="0.50"
                android:endColor="#ffEEEEEE"
                android:angle="270" />
        </shape>
    </item>
    
    <item
        android:id="@android:id/progress">
        <clip>
            <shape>
                <corners
                    android:radius="0dip" />
                <stroke
                    android:width="1dip"
                    android:color="#ff000000" />
                <gradient
                    android:startColor="#ff86CF10"
                    android:endColor="#ff86CF10"
                    android:angle="90" />
            </shape>
        </clip>
    </item>
    

  2. custom_progress_bar_hor_night.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--  @author : @
    
    -->
    <layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@android:id/background">
        <shape>
            <corners
                android:radius="0dip" />
            <stroke
                android:width="1dp"
                android:color="#ffffffff" />
            <gradient
                android:startColor="#ff000000"
                android:centerColor="#ff000000"
                android:centerY="0.50"
                android:endColor="#ff000000"
                android:angle="270" />
        </shape>
    </item>
    
    <item
        android:id="@android:id/progress">
        <clip>
            <shape>
                <corners
                    android:radius="0dip" />
                <stroke
                    android:width="1dip"
                    android:color="#ffffffff" />
                <gradient
                    android:startColor="#ff86CF10"
                    android:endColor="#ff86CF10"
                    android:angle="90" />
            </shape>
        </clip>
    </item>
    

如您所见,这些自定义进度条仅在背景颜色和形状线颜色方面有所不同。

现在,从 Android 应用程序(java 代码)切换这两个 .xml 文件(ProgressBar 设计)的最佳方法是什么?实际上,我想在按下应用程序屏幕上的按钮时切换 ProgressBar 设计。

我应该将两个 ProgressBar 实例放在一起并更改它们的可见性(一个可见另一个不可见,反之亦然),还是有更智能的方式来操作单个 ProgressBar 实例?

编辑:

我知道描述的方法 here。用户使用以下方法根据当前进度值在 ProgressBar 的三种不同 .xml 描述之间进行选择:

<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="2999" android:drawable="@drawable/progress_horizontal_red" />
    <item android:maxLevel="4999" android:drawable="@drawable/progress_horizontal_yellow" />
    <item android:maxLevel="10000" android:drawable="@drawable/progress_horizontal_green" />
</level-list>

我想实现非常相似的事情。唯一的区别是我不希望当前进度值改变我将在屏幕上看到的 .xml 文件。我希望能够通过按下按钮来更改 ProgressBar 设计。 我觉得 android:maxLevel="xxxx" 选择器应该更改为可以采用 truefalse 值的东西。我会通过按下按钮来切换此 true/false 值。

如有任何建议,我们将不胜感激。

非常感谢您的时间和精力。

真诚的, 博扬.

您只需在代码中对 ProgressBar 调用 setProgressDrawable(),无需两个进度条。

progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_horizontal));

progressBar.setProgressDrawable(context.getResources().getDrawable(R.drawable.custom_progress_bar_hor_night));