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)て各レイヤーを取得し、それを配列に入れて. 次に、ビューの背景ドローアブルを に設定します。Resourcescontext.getResources()DrawableLayerDrawableLayerDrawable

例:

//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 に答える