我在activity_main.xml文件中创建了进度条,如下所示:
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="25dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:max="100"
android:progress="0"
android:progressDrawable="@drawable/myprogdraw" />
然后我在drawable文件夹中创建了一个myprogdraw.xml来控制brogressBar设计,如下所示:
<item android:id="@android:id/background">
<shape>
<gradient
android:angle="180"
android:centerColor="#ddd"
android:endColor="#888"
android:startColor="#42a" />
</shape>
</item>
<item android:id="@android:id/progress">
<bitmap
android:src="@drawable/prog"
android:tileMode="repeat" />
</item>
并使用以下图片:
但布局不符合要求,它看起来像下面这样重复:
那么如何使progressBar的位图可伸缩不可重复?
如上图所示,使用的图像是9补丁图像,但没有任何改变。
答案 0 :(得分:0)
可能因为这个原因,你使用的是bitmap
元素。
解决方案1:
删除此文件(您确实不需要):myprogdraw.xml
只需使用这个:prog.9.png
像这样:
android:progressDrawable="@drawable/prog"
请注意9补丁文件中的双扩展。
<强> [编辑] 强>
解决方案2:
如果您想将其他渐变作为背景保留,请将bitmap
元素更改为nine-patch
元素:
<item android:id="@android:id/progress">
<nine-patch
android:src="@drawable/prog"
android:dither="true"
/>
</item>
[编辑2]
解决方案3:
使用渐变代替9补丁。
<item android:id="@android:id/progress">
<shape>
<gradient
android:angle="180"
android:centerColor="#fe0"
android:endColor="#f00"
android:startColor="#0f0" />
</shape>
</item>
答案 1 :(得分:0)
最后,我弄清楚了,并希望我的解决方案可以帮助其他人。
这可以通过使用clip元素而不是bitmap元素来完成,这里是layer-list的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>
<gradient
android:angle="0"
android:centerColor="#ddd"
android:endColor="#999"
android:startColor="#999" />
<corners android:radius="5dp" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip android:drawable="@drawable/progress" />
<shape>
<corners android:radius="5dp" />
</shape>
</item>
</layer-list>
作为一个快速测试,我构建了一个新的空项目,然后添加一个进度条,并编辑文本以通过在单击新按钮上调用setProgress方法来控制进度条值:
完全符合要求的结果,如下所示:
我注意到圆角应用于背景,但未应用于进度,这可能是另一个问题,需要另外一个问题来解决,但现在还可以。