【问题标题】:stretchable image source for progressBarprogressBar 的可拉伸图像源
【发布时间】:2015-05-18 20:05:53
【问题描述】:

我在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 个补丁图像,但没有任何变化。

【问题讨论】:

    标签: android android-drawable android-progressbar


    【解决方案1】:

    可能正因为如此,您正在使用 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>
    

    【讨论】:

    • 我尝试了这些解决方案,progressBar 显示为已完成,progressbar.setProgress(5) 应该显示一部分绿色但是它显示完整图像就像 progressbar.setProgress(100)
    • 好吧,你使用的最小图像尺寸实在是太大了。考虑减小最初的 9 个补丁大小。或者改用另一个渐变
    【解决方案2】:

    这可以通过使用剪辑元素而不是位图元素来完成,这里是图层列表的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 方法来编辑文本以使用它来控制进度条值:

    结果如愿以偿,如下图:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      相关资源
      最近更新 更多