2011-12-23 29 views
5

以下是我的LayerList的简化版本。它在一个项目中有一个位图来防止缩放。我想以编程方式更改此位图的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> 

我尝试没有成功如下:

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 2012-05-06 12:46:20

+1

你能想出答案吗? – 2015-11-09 13:05:51

回答

0

演员newDrawable到BitmapDrawable(假定它是一个,当然),你可以使用BitmapDrawable.setGravity您使用android以同样的方式:引力属性在你的xml中以防止缩放

+1

如果我只想更改SRC属性?如何更改R.id.bitmap位图的SRC属性? – Lobo 2012-05-06 13:43:31

+0

实际上这是一个更长的过程,因为你不能只更新源属性。 xml中的src属性只是一种方便...在所有情况下,您必须将资源解码为新的Bitmap对象,并将其封装在Drawable中,无论这是由框架为您完成还是您自己编写代码。查看LayerDrawable和BitmapDrawable类文档以查看可用的功能。 – Rich 2012-05-06 14:15:04