2011-12-23 41 views
5

ここでは、レイヤリストの簡易版を示します。スケーリングを防ぐためにアイテムにビットマップがあります。私はプログラムでこのビットマップのdrawableを変更したい。これを行う方法はありますか?LayerListDrawableでのビットマップ描画の変更

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/item" 
     android:left="165dp" 
     android:top="245dp" > 
     <bitmap 
      android:id="@+id/bitmap" 
      android:src="@drawable/tag_de_01" 
      android:gravity="top|left" /> 
    </item> 

</layer-list> 

私は成功せず、次のことを試してみました:BitmapDrawableへ

Resources res = getResources(); 
LayerDrawable layerDrawable = (LayerDrawable) res.getDrawable(R.drawable.layer_list_drawable); 

Drawable newDrawable = (Drawable)res.getDrawable(R.drawable.something); 

// works, but scales the image because the drawable of the item is set instead the one of the bitmap 
layerDrawable.setDrawableByLayerId(R.id.item, newDrawable); 

// doesn't work at all 
layerDrawable.setDrawableByLayerId(R.id.bitmap, newDrawable); 
+2

私は同じ問題があります。助けてもらえますか? – Lobo

+1

あなたは答えを出すことができましたか? –

答えて

0

はキャストnewDrawable(もちろん、それが1であると仮定して)、そしてあなたがアンドロイドを使用するのと同じ方法をBitmapDrawable.setGravity使用することができます:スケーリングを防ぐためにXMLの重力属性

+1

SRC属性を変更したいだけの場合はどうすればいいですか?R.id.bitmapビットマップのSRC属性をどのように変更しますか? – Lobo

+0

ソース属性を更新するだけではできないので、実際にはそれを実行するプロセスが長くなります。 xmlのsrc属性は単なる便利なものです...すべての場合、リソースを新しいBitmapオブジェクトにデコードして、それがフレームワークによって実行されるか、コードを自分で記述するかを問わずDrawableでラップする必要があります。 LayerDrawableおよびBitmapDrawableクラスのドキュメントを参照して、使用可能な機能を確認してください。 – Rich

関連する問題