Android - 如何在if语句中获取要使用的图像资源

时间:2014-06-29 14:22:19

标签: android imageview onclicklistener

所以我通过xml文件为onClick设置了一个ImageView监听器。它被称为changeImage()。在那,我希望它是这样的:

if(img.getImageResource == R.drawable.1){
    img.setImageResource(R.drawable.2);
}else if(img.getImageResource == R.drawable.2){
    img.setImageResource(R.drawable.1)
}

只有问题在于,没有getImageResource这样的东西。我该怎么做?

修改

public void changeImage(View v) {
    ImageView img = (ImageView) v.findViewById(R.id.img);
    Drawable drawable = img.getDrawable();

    if(drawable == getResources().getDrawable(R.drawable.lightbulb_off)){
        img.setImageResource(R.drawable.ic_launcher);
    }else if(drawable == getResources().getDrawable(R.drawable.ic_launcher)){
        img.setImageResource(R.drawable.lightbulb_off);
    }
}

不起作用。为什么???????? :'(

2 个答案:

答案 0 :(得分:0)

每次调用Resources.getDrawable()都会返回一个唯一的对象,因此== compare将永远不会返回true。 Drawable也通常不会以解决您问题的方式实现Object.equals()。

相反,可以考虑使用drawable作为图像,使用ImageView.setSelected(boolean)在状态之间切换。

RES /抽拉/ lightbulb.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_selected="true" android:drawable="@drawable/ic_launcher" />
  <item android:drawable="@drawable/lightbulb_off" />
</selector>

RES /布局/ your_layout.xml:

<ImageView android:id="@+id/img" android:src="@drawable/lightbulb" />

在您的代码中,切换选择状态。

public void changeImage(View v) {
    ImageView img = (ImageView) v.findViewById(R.id.img);
    img.setSelected(!myImageView.isSelected());
}

答案 1 :(得分:0)

正如alanv所述,使用选择器可以工作,您可以在其中检查ImageView的选定状态。

我建议将业务逻辑与UI分开;例如创建一个状态为LightBulbON的{​​{1}}类。您不必在切换时依赖ImageView的当前状态,而只需检查OFF的状态:

lightBulb