Seekbar或多种颜色的进度条

时间:2013-05-07 07:34:29

标签: android progress-bar seekbar

enter image description here

我想创建一个像这样的条,当进度为零时,它将是淡入淡出的颜色,但随着进展,它将在那部分变得明亮(这是我能解释的最好)主要的是我想要吧同时显示所有颜色。

4 个答案:

答案 0 :(得分:18)

剪切你的“on”drawable:enter image description here
超过你的“关闭”drawable:enter image description here

使用res/drawable/custom_progress_drawable.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- Background -->
    <item
        android:id="@android:id/background"
        android:drawable="@drawable/custom_progress_bar_off"/>

    <!-- Secondary progress - this is optional -->
    <item android:id="@android:id/secondaryProgress">
        <clip android:drawable="@drawable/custom_progress_bar_secondary" />
    </item>

    <!-- Progress -->
    <item android:id="@android:id/progress">
        <clip android:drawable="@drawable/custom_progress_bar_on" />
    </item>

</layer-list>

Activity开始,使用

Drawable progressDrawable = ResourcesCompat.getDrawable(getResources(), R.drawable.custom_progress_drawable, getTheme());
myProgressBar.setProgressDrawable(progressDrawable);

或在xml中,使用

android:progressDrawable="@drawable/custom_progress_drawable"

这是在xml中使用android:max="10"时的结果:

enter image description here

有点偏离,但您可以使用setMax()更像10000的内容,并在调用setProgress()时进行一些抵消计算以使其更清晰。

答案 1 :(得分:7)

最后!哈哈,我为你做了一个任务,如果这就足够了,请随时给我赏金,哈哈。


在布局中尝试使用它:

    <View android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight=".20"/>

            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:orientation="horizontal"
                android:gravity="center"
                android:layout_weight="0.62">
                <View android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight=".03"/>
                <ProgressBar style="?android:attr/progressBarStyleHorizontal"
                    android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight="0.94"
                    android:progressDrawable="@drawable/progressmask"
                    android:progress="0"
                    android:max="10"
                    android:rotation="180"/>
                <View android:layout_width="0dip"
                    android:layout_height="fill_parent"
                    android:layout_weight=".03"/>
            </LinearLayout>
    <View
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight=".18"/>
</LinearLayout>

引用此drawable(progressmask.xml):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
    <shape>
        <corners android:radius="50dip" />
        <gradient android:startColor="#00000000" android:endColor="#00000000" android:angle="270" />
        <stroke android:width="1dp" android:color="#00000000" />
    </shape>
</item>
<item android:id="@android:id/progress">
    <clip>
        <shape>
            <corners android:radius="50dip" />
            <gradient android:startColor="#aa000000" android:endColor="#aa000000"
                android:angle="270" />
            <stroke android:width="1dp" android:color="#00000000" />
        </shape>
    </clip>
</item>
</layer-list>

和此图片(colorprogress.png)

enter image description here

它的作用是将图像设置为线性布局的背景,其中包含一个进度条。进度条为图像添加了一个半透明的黑色遮罩,使其看起来是关闭的。

注意:为了获得这种效果,我不得不使用进度条(即将其翻转,并将其设置为仅10个间隔)。您将需要进行一些数学运算以获得与图像对齐的进度。即setprogress((100-trueprogress)/ 10)。抱歉,我没有为你做这部分。

这是50%的进展(小x和三角形将在设备上消失)

enter image description here

我希望这能回答你的问题!

答案 2 :(得分:0)

就像已经建议的那样,我认为你应该去一个图层列表然后设置多个drawables。 这个问题的主要问题是我需要调整大小。固定大小的解决方案很容易实现。

答案 3 :(得分:0)

您无法将进度条实际设置为不同的颜色。但是,您只能使用on drawable并获得所需的效果。您可以只应用图层蒙版。我的意思是添加一个最初称为dark grey的相对布局,即渐变只有一种深灰色。现在,使用code以编程方式在左侧设置渐变颜色。显然左边的颜色是透明的。详细了解Linear Gradients。就是这样。您只需计算右梯度开始的位置,而不是左梯度(transparent)结束的位置。

此方法存在轻微缺陷,可能无法在所有设备上运行。

完美的方法是创建多个.9png图像,并每次以编程方式设置进度对话框的可绘制对象。