尝试学习一些新事物而又无法解决这一问题,我们将不胜感激。鉴于以下简单的代码(可从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变量中正确交换吗?现在如何将其放入图层列表?我假设我使用findDrawableByLayerIdsetDrawableByLayerId,但是究竟如何呢?否则我可能做错了!帮助!

我想做什么?更改显示的绘图。例如,假设我有另一个名为“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

09-28 10:14