在可绘制图层列表中调整位图大小

Posted

技术标签:

【中文标题】在可绘制图层列表中调整位图大小【英文标题】:Resize bitmap inside a drawable layer-list 【发布时间】:2012-03-25 08:48:25 【问题描述】:

目前我正在开发一个 android 应用程序。我想制作一个背景如下的文本(标题):

 _______
/______/

我有以下代码:

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>    
            <gradient
              android:startColor="@color/jaarkleur"
              android:centerColor="@color/jaarkleur"
              android:endColor="#E66C2C00"
              android:angle="0" />
            <stroke android:
            android:color="#ff000000"
            />       
        </shape>
    </item>
    <item>
        <bitmap android:src="@drawable/overlay_left" android:gravity="left"  />
    </item>
    <item>
        <bitmap android:src="@drawable/overlay_right" android:gravity="right"  />
    </item>

</layer-list>

所以我把图像做成了一个透明的三角形,放在两端。

这适用于只有一行的标题,但是当标题占用两行时,它看起来像这样:

所以我的问题是:是否可以调整两个图像的大小以使其看起来正确? 谢谢!

【问题讨论】:

您是否考虑过使用 9 补丁? 是的,但我不想使用 9-patch,我想保留“内部”颜色变量。 【参考方案1】:

我使用两个(半透明)代表角的图像解决了这个问题。

XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
                <shape>    
                    <gradient
                      android:startColor="@color/jaarkleur"
                      android:centerColor="@color/jaarkleur"
                      android:endColor="#E66C2C00"
                      android:angle="0" />
                    <stroke android:
            android:color="#ff000000"
            />       
                </shape>
        </item>
        <item>
            <bitmap android:src="@drawable/overlay_left" android:gravity="left|top"  />
        </item>
        <item>
            <bitmap android:src="@drawable/overlay_right" android:gravity="right|bottom" />
        </item>        
</layer-list>

【讨论】:

你也可以使用android:gravity="right|fill_vertical"android:gravity="left|fill_vertical"来垂直缩放你的左右位图【参考方案2】:

考虑使用NinePatchDrawable,而不是使用带有渐变/边框笔触和自定义图像的图层列表。

还有一个方便的 9-patch creater 随 android SDK 一起提供。

【讨论】:

之所以要使用渐变色是因为变量“jaarkleur”可以改变。修改这个变量然后制作一个全新的背景图像更容易。

以上是关于在可绘制图层列表中调整位图大小的主要内容,如果未能解决你的问题,请参考以下文章

将具有 alpha 的位图图层渲染到 FBO

图层列表中的着色位图

有没有一种方法来调整位图图像的大小?

同一xml中的选择器、图层列表和形状/位图

如何在 Android 中调整位图的大小?

调整窗口大小会导致位图被覆盖