以编程方式更改可绘制资源

时间:2015-10-04 12:16:45

标签: android

我有以下xml资源代码,它是卡片项列表的背景布局

android:drawable="@drawable/kpop"

我的问题是我想以编程方式更改可绘制资源

<input type="hidden" text="foo" name="<?=htmlspecialchars($_POST['foo'])?>">

(以便每张卡片的背景图片都不同)

任何想法/提示我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

以下是如何实现这一目标:

  1. 获取对图层列表的引用

    LayerDrawable layer = (LayerDrawable)yourView.getBackground();

    LayerDrawable layer = (LayerDrawable)context.getResources().getDrawable(R.id.yourLayerDrawable);

  2. 在内部创建图层drawable的新实例

    layer.Mutate();

    Android内部缓存drawables,这意味着如果通过上述方法修改drawable获取,则所有其他drawable将受到影响。为防止这种情况发生,您可以致电Drawable.Mutate()告诉系统保留一份单独的drawable副本,以免影响其他drawable。

  3. 设置要修改的项目的ID

    android:id="@+id/image_background"

  4. 像这样:

    <item
        android:left="0dp"
        android:right="0dp"
        android:top="0dp"
        android:bottom="2dp"
        android:id="@+id/image_background" <----
        android:drawable="@drawable/kpop">
        <shape android:shape="rectangle">
            <solid android:color="#151B54"/>
            <corners android:radius="2dp" />
        </shape>
    </item>
    

    1. 设置/重置该项目的drawable

      layer.setDrawableByLayerId(R.id.image_background, yourNewDrawable);

    2. 重绘图层

      layer.invalidateSelf();

答案 1 :(得分:1)

您没有发布您的java代码..我认为它可以帮助您。 尝试在您自己的逻辑中使用此代码。

yourCard.setBackgroundDrawable( getResources().getDrawable(R.drawable.kpop) );

yourCard.setBackground(R.drawable.kpop);

代码没有经过测试,但我认为它会起作用..评论请提出任何问题。