3

在列表视图的适配器中,我将孩子的背景设置为:

view.setBackgroundResource(R.drawable.bg_checked);

这是背景文件:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <color android:color="@color/gold" />
    </item>
    <item>
        <nine-patch
            android:src="@drawable/bg_base_image"
            android:dither="true" />    
    </item> 
    <item>
        <bitmap 
            android:src="@drawable/bg_stripes_golden_image"
            android:antialias="true"
            android:dither="true"
            android:tileMode="repeat" />
    </item>
</layer-list>

尽管如您所见,此可绘制对象是一个<layer-list>包含重复图像的位图。问题是当我通过 XML 设置背景时它可以正常工作,但是当我通过 Java 设置它时,背景不会重复并且图像只是被拉伸了。有没有其他方法可以通过 Java 设置这种类型的背景?

4

1 回答 1

1

您可以尝试使用LayerDrawable在代码中创建整个图层列表。我想你只需调用getDrawable(R.drawable.bg_layer1)一个Resources对象(这可以通过调用context.getResources()来获得)来获取每一层并将其放入一个Drawable数组中以构造LayerDrawable. 然后将视图的背景可绘制对象设置为您的LayerDrawable.

例子:

//Method to get the LayerDrawable
private LayerDrawable getLayerDrawable(){
    Resources res = context.getResources();
    Drawable layer1 = res.getDrawable(R.drawable.first_layer);
    Drawable layer2 = res.getDrawable(R.drawable.second_layer);
    //...
    Drawable layerX = res.getDrawable(R.drawable.x_layer);

    return new LayerDrawable(new Drawable[]{layer1, layer2, layerX});
}

//Wherever you're setting the background, just do:
view.setBackgroundDrawable(getLayerDrawable());
于 2013-04-22T21:52:24.450 回答