progressBar的可伸缩图像源

时间:2015-03-16 16:00:18

标签: android android-drawable android-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>

并使用以下图片:

enter image description here

但布局不符合要求,它看起来像下面这样重复: enter image description here

那么如何使progressBar的位图可伸缩不可重复?

如上图所示,使用的图像是9补丁图像,但没有任何改变。

2 个答案:

答案 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方法来控制进度条值:

完全符合要求的结果,如下所示:

enter image description here

enter image description here

enter image description here

我注意到圆角应用于背景,但未应用于进度,这可能是另一个问题,需要另外一个问题来解决,但现在还可以。