进度条的可拉伸图像源
stretchable image source for progressBar
我在 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 补丁图像,但没有任何变化。
可能正因为如此,您正在使用 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>
这可以通过使用剪辑元素而不是位图元素来完成,这里是图层列表的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 方法来使用它来控制进度条值:
结果如愿以偿,如下图:
我注意到圆角应用于背景,但没有应用于进度,这可能是另一个问题,需要另一个问题来解决,但目前还可以。
我在 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 补丁图像,但没有任何变化。
可能正因为如此,您正在使用 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>
这可以通过使用剪辑元素而不是位图元素来完成,这里是图层列表的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 方法来使用它来控制进度条值:
结果如愿以偿,如下图:
我注意到圆角应用于背景,但没有应用于进度,这可能是另一个问题,需要另一个问题来解决,但目前还可以。