所以我通过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);
}
}
不起作用。为什么???????? :'(
答案 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分开;例如创建一个状态为LightBulb
或ON
的{{1}}类。您不必在切换时依赖ImageView的当前状态,而只需检查OFF
的状态:
lightBulb