尝试学习一些新事物而又无法解决这一问题,我们将不胜感激。鉴于以下简单的代码(可从Google文档中找到):
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" />
问题:如何以编程方式引用图层列表中的可绘制对象之一,以便可以将其更改为其他可绘制对象?
谢谢。
所以,现在我有了新的drawable,我想在
myImage
变量中正确交换吗?现在如何将其放入图层列表?我假设我使用findDrawableByLayerId
和setDrawableByLayerId
,但是究竟如何呢?否则我可能做错了!帮助!我想做什么?更改显示的绘图。例如,假设我有另一个名为“android_purple”的可绘制对象,如何在上面的层列表示例中将其切换为“android_green”可绘制对象?
编辑:
据我所知,这是到目前为止的代码(无法正常工作,我收到
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.
最佳答案
这是我会尝试的方法:
步骤#1:将android:id
属性放在<item>
元素上,如图所示in the documentation
步骤#2:将getDrawable()
结果转换为 LayerDrawable
步骤#3:如果您不想影响其他使用mutate()
的人,请调用Drawable
(可能是可选的)
步骤#4:调用setDrawableByLayerId()
为给定的图层ID设置/替换Drawable