我想创建一个像这样的条,当进度为零时,它将是淡入淡出的颜色,但随着进展,它将在那部分变得明亮(这是我能解释的最好)主要的是我想要吧同时显示所有颜色。
答案 0 :(得分:18)
剪切你的“on”drawable:
超过你的“关闭”drawable:
使用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"
时的结果:
有点偏离,但您可以使用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)
它的作用是将图像设置为线性布局的背景,其中包含一个进度条。进度条为图像添加了一个半透明的黑色遮罩,使其看起来是关闭的。
注意:为了获得这种效果,我不得不使用进度条(即将其翻转,并将其设置为仅10个间隔)。您将需要进行一些数学运算以获得与图像对齐的进度。即setprogress((100-trueprogress)/ 10)。抱歉,我没有为你做这部分。
这是50%的进展(小x和三角形将在设备上消失)
我希望这能回答你的问题!
答案 2 :(得分:0)
就像已经建议的那样,我认为你应该去一个图层列表然后设置多个drawables。 这个问题的主要问题是我需要调整大小。固定大小的解决方案很容易实现。
答案 3 :(得分:0)
您无法将进度条实际设置为不同的颜色。但是,您只能使用on
drawable并获得所需的效果。您可以只应用图层蒙版。我的意思是添加一个最初称为dark grey
的相对布局,即渐变只有一种深灰色。现在,使用code以编程方式在左侧设置渐变颜色。显然左边的颜色是透明的。详细了解Linear Gradients。就是这样。您只需计算右梯度开始的位置,而不是左梯度(transparent
)结束的位置。
此方法存在轻微缺陷,可能无法在所有设备上运行。
完美的方法是创建多个.9png
图像,并每次以编程方式设置进度对话框的可绘制对象。