更改Android imageButton会在旧图像后面绘制新图像

时间:2014-05-29 03:21:20

标签: android imagebutton android-imagebutton

我正在写一个处理扑克牌的程序。在这里,我试图展示玩家的手。我有六个imageButtons sixCard0 - sixCard5,每个都会显示来自玩家手中的一张牌。每个都有其默认图像(问号卡)设置在xml:

<ImageButton
        android:id="@+id/sixCard0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="0dp"
        android:src="@drawable/card0" />

我想将此图像更改为表示活动开始时玩家手中已有卡的图像。这些卡片保存在CribbageApplication.cardList中。在活动onCreate(...)我有:

findViewById(R.id.sixCard0).setBackgroundResource(getResources().getIdentifier(Card.getImageName(((CribbageApplication) this.getApplication()).getCardList()[0]), "drawable", getPackageName()));
findViewById(R.id.sixCard0).invalidate();

访问这些值不是我遇到问题的地方。我的问题是,当我运行应用程序时,默认图像仍然显示在imageButtons上。请参阅:http://s23.postimg.org/cbmxchonv/Screenshot_2014_05_28_22_15_25_1.png

在调试中,我决定使用较小的图像作为imageButton的默认图像。 (在这种情况下,它是一个带有文字的图标,上面写着&#34; Set Hand&#34;我从我的程序中的其他地方采购。)现在,当我运行应用程序时,您可以清楚地看到默认的&#34; Set Hand&# 34;图标那里有新的更大的卡片图像!请参阅:http://s12.postimg.org/3ytgenaz1/Screenshot_2014_05_28_21_48_10_1.png

有人可以告诉你为什么会这样吗?

编辑:我已经解决了这个问题。我应该使用setImageResource(...)而不是setBackgroundResource(...)。在上面的示例中,需要使用类型转换来调用此函数:

((ImageButton) findViewById(R.id.sixCard0)).setBackgroundResource(getResources().getIdentifier(Card.getImageName(((CribbageApplication) this.getApplication()).getCardList()[0]), "drawable", getPackageName()));

2 个答案:

答案 0 :(得分:1)

你需要使用setImageResourse而不是setBackgroundResourse

findViewById(R.id.sixCard0).setImageResource(getResources().getIdentifier(Card.getImageName(((CribbageApplication) this.getApplication()).getCardList()[0]), "drawable", getPackageName()));

答案 1 :(得分:1)

android:srcandroid:background是两回事。

解决问题:

使用setImageResource()代替setBackgroundResource()