2011-08-05 12 views
2

コードで次のXMLをコード化しようとしています。xml layer-listをコードでレイヤードラブルに変換する方法

----描画可能\のmy_layerdrawable.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap android:src="@drawable/my_image" 
     android:gravity="left"/> 
    </item> 
    <item android:left="10dp"> 
     <bitmap android:src="@drawable/my_image" 
     android:gravity="left" /> 
    </item> 
    <item android:top="10dp"> 
     <bitmap android:src="@drawable/my_image" 
     android:gravity="left"/> 
    </item> 
    <item android:top="10dp" android:left="10dp"> 
     <bitmap android:src="@drawable/my_image" 
     android:gravity="left" /> 
    </item> 
    <item android:top="20dp"> 
     <bitmap android:src="@drawable/my_image" 
     android:gravity="left"/> 
    </item> 
    <item android:top="20dp" android:left="10dp"> 
     <bitmap android:src="@drawable/my_image" 
     android:gravity="left" /> 
    </item> 
</layer-list> 

私は、次のブロックをコード化されたが、それは画像を引き伸ばしています。

InsetDrawable[] layers = new InsetDrawable[this.itemCount]; 

    Resources resources = getResources(); 

    ImageButton imgButton = (ImageButton) findViewById(R.id.btnItems); 
    int layerTop = 0; 
    for (int i = 0; i < this.itemCount; i++) 
    { 

     int layerLeft = i % 2 == 1 ? 5 : 0; 

     Drawable dr = resources.getDrawable(R.drawable.my_image); 
     layers[i] = new InsetDrawable(dr, layerLeft, layerTop, -layerLeft, -layerTop); 

     layerTop += i % 2 == 1 ? 10 : 0; 


    } 

    LayerDrawable layerDrawable = new LayerDrawable(layers); 

    imgButton.setImageDrawable(layerDrawable); 

私はそれが正確に何のストレッチや変更を作業していないimgButtonに描画可能なXMLを割り当てます。

ImageButton imgButton = (ImageButton) findViewById(R.id.btnItems); 
imgButton.setImageResource(R.drawable.my_layerdrawable); 

レイヤーをコードで描画可能にする考えはありますか?

ありがとうございました。

答えて

4

BitmapDrawableを使用できます。

ビットマップをラップし、タイル張り、ストレッチまたはアライメントが可能なDrawableです。 BitmapDrawableは、ファイルパス、入力ストリーム、XMLインフレーション、またはBitmapオブジェクトから作成できます。

あなたのコードは次のようになります。

Drawable[] layers = new Drawable[this.itemCount]; 
Resources resources = getResources(); 
ImageButton imgButton = (ImageButton) findViewById(R.id.btnItems); 

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

for (int i = 0; i < this.itemCount; i++) 
{ 
    Bitmap bm = BitmapFactory.decodeResource(resources, R.drawable.icon); 
    BitmapDrawable bmd = new BitmapDrawable(bm); 
    bmd.setGravity(Gravity.TOP);   
    bmd.setTargetDensity(metrics); 
    layers[i] = bmd; 
} 
LayerDrawable layerDrawable = new LayerDrawable(layers); 

int layerTop = 0; 
for (int i = 0; i < this.itemCount; i++) 
{ 

    int layerLeft = i % 2 == 1 ? 5 : 0; 
    layerDrawable.setLayerInset(i, layerLeft, layerTop, -layerLeft, -layerTop); 
    layerTop += i % 2 == 1 ? 10 : 0; 
} 

imgButton.setImageDrawable(layerDrawable); 
関連する問題