如何更改可绘制的图层列表?

试图学习一些新的东西,不能找出这一个,任何帮助表示赞赏。 鉴于这个简单的代码是正确的谷歌的文档:

layers.xml:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/first_image"> <bitmap android:src="@drawable/android_red" android:gravity="center" /> </item> <item android:id="@+id/second_image" android:top="10dp" android:left="10dp"> <bitmap android:src="@drawable/android_green" android:gravity="center" /> </item> <item android:id="@+id/third_image" android:top="20dp" android:left="20dp"> <bitmap android:src="@drawable/android_blue" android:gravity="center" /> </item> </layer-list> 

和main.xml:

 <ImageView android:id="@+myImageView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/layers" /> 

问题:如何以编程方式引用图层列表中的其中一个绘图,以便将其更改为不同的绘图?

谢谢。

所以,现在我有我的新绘图,我想在variablesmyImage正确交换? 现在我怎么把它放到图层列表中呢? 我假设我使用findDrawableByLayerIdsetDrawableByLayerId ,但究竟如何? 或者我可以做到完全错误! 帮帮我!

我想做什么? 更改显示的drawable。 例如,假设我有另一个名为“android_purple”的drawable,我将如何在上面的图层列表示例中将其切换为“android_green”drawable?

编辑:

有限的知识,这里是我的代码到目前为止(这是行不通的,我得到错误, setDrawableByLayerId是未定义):

 Resources res = getApplicationContext().getResources(); BitmapDrawable newImage = (BitmapDrawable) res.getDrawable(R.drawable.android_purple); //Get replacement image, can't use LayerDrawable or get error. boolean layer_drawable_changed = (setDrawableByLayerId((R.id.second_image), newImage)); //Set new drawable? Error on this line. 

问题:如何以编程方式引用图层列表中的其中一个drawable,以便将其更改为不同的drawable?

这是我会尝试的:

步骤1:如文档中所示,将android:id属性放在<item>元素上

第2步:将getDrawable()结果转换为LayerDrawable

步骤#3:如果你不想影响使用Drawable其他人(可能是可选的),调用mutate()

第四步:调用setDrawableByLayerId()来设置/replace给定图层ID的Drawable

第1步:从可绘制文件夹中检索图层列表(我的数据位于/res/drawable/digits.xml)

 LayerDrawable ld = (LayerDrawable) getResources().getDrawable(R.drawable.digits); 

第2步:命名replace图像(不是已经在图层列表中的图像)

 Drawable replace = (Drawable) getResources().getDrawable(R.drawable.replacing_image); 

第3步:使用setDrawableByLayerId(int id,Drawable d)方法replace图像

 boolean testfactor = ld.setDrawableByLayerId(R.id.first_image, replace); 

这将返回一个布尔值,如果replace图像失败,将返回false

第4步:加载主Imageview(基本上是实际的XML布局代码中的层列表的id)

 ImageView layoutlist1 = (ImageView)findViewById(R.id.layout_list1); 

第5步:(重新) – 使用更新后的LayerDrawable设置Imageview,方法如下:

 layoutlist1.setImageDrawable(ld); 

资源:我是一名软件和移动应用程序开发人员。

为了达到这个目的,我查看了所有networking和Stackflow.com。 所有的答案都像在这个页面上的那些。 我正在尝试做同样的事情。 然后我想到了“更新形象”的想法,并谈到了这一点。

应该/也可以用于当你想把一个位图放在你的列表上的一个项目的地方。 你只需要使用replace(setDrawableByLayerId)方法。 在ID上取代。 ImageView有很多方法。

这也有帮助: LayerList可绘制+转换为位图