我想最初创建一个这样的栏,当进度为零时,它会褪色,但随着进度的进行,那部分会变得明亮(这是我能解释的最好的)主要是我希望栏显示所有同时颜色。
4 回答
剪辑你的“on”drawable:
在你的“off”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"
这是android:max="10"
在 xml 中使用时的结果:
它有点偏离,但您可以在调用时使用setMax()
更类似的东西10000
并进行一些偏移计算setProgress()
以使其更清洁。
最后!我执行了一项任务来为你解决这个问题,所以如果这足够了,请随时给我这个赏金,哈哈。
尝试在您的布局中使用它:
<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 和三角形将在设备上消失)
我希望这回答了你的问题!
就像已经建议的那样,我认为您应该选择一个图层列表并设置多个可绘制对象。这方面的主要问题是我需要调整大小。固定大小的解决方案将很容易实现。