2011-08-05 4 views
2

코드별로 다음 xml을 코딩하려고합니다.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> 

---- 그리기 \의 my_layerdrawable.xml 난 다음 블록을 부호화하지만, 화상을 신장한다.
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입니다. 파일 경로, 입력 스트림, XML 인플레이션 또는 비트 맵 객체를 사용하여 BitmapDrawable을 만들 수 있습니다.

귀하의 코드는 다음과 같을 것이다 :

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);