如何更改可绘制的图层列表?
试图学习一些新的东西,不能找出这一个,任何帮助表示赞赏。 鉴于这个简单的代码是正确的谷歌的文档:
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
正确交换? 现在我怎么把它放到图层列表中呢? 我假设我使用findDrawableByLayerId
和setDrawableByLayerId
,但究竟如何? 或者我可以做到完全错误! 帮帮我!
我想做什么? 更改显示的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可绘制+转换为位图