在 imageview onClick 中更改图像
Change image in imageview onClick
我想在 Onclick
函数的图像视图中更改图像。我已经试过了:
bt_audiocapture.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (checkPermission()) {
if (bt_audiocapture.getResources().getDrawable(R.drawable.ic_mic).equals(R.drawable.ic_mic)) {
start();
bt_audiocapture.setImageResource(R.drawable.ic_stop);
} else if (bt_audiocapture.getResources().getDrawable(R.drawable.ic_stop).equals(R.drawable.ic_stop)) {
stop();
bt_audiocapture.setImageResource(R.drawable.ic_play);
} else if (bt_audiocapture.getResources().getDrawable(R.drawable.ic_play).equals(R.drawable.ic_play)) {
play();
}
}
}
});
bt_audiocapture.getResources().getDrawable(R.drawable.ic_mic)
returns 一个 Drawable
对象。您不能将它与 R.drawable.ic_mic
进行比较,即 integer
。这有点像比较 car
和 green color
。
为了完成你的任务,创建一些像 private int state = 0;
这样的字段,以及一些像
这样的常量
private final STATE_PLAYING = 1;
private final STATE_STOPPED = 2;
private final STATE_NONE = 0;
然后:
if (state == STATE_NONE) {
start();
bt_audiocapture.setImageResource(R.drawable.ic_stop);
state = STATE_PLAYING;
} else if (state == STATE_PLAYING) {
stop();
bt_audiocapture.setImageResource(R.drawable.ic_play);
state = STATE_STOPPED;
} else if (state == STOPPED) {
play();
state = STATE_PLAYING;
}
你的 equals
表达式总是 return false,我希望你的 if
块中的 none 被执行。您是否调试了该代码?
我建议将状态保存在另一个变量中,例如enum
.
此外,出于性能原因,您应该使用 setImageDrawable
。请参阅 setImageResource
的 javadoc:
This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup
试试这个代码,它对我有用:-
img = (ImageView) findViewById(R.id.img);
img.setTag(0);
img.setImageResource(R.drawable.images);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (Integer.parseInt(img.getTag().toString()) == 0) {
img.setImageResource(R.drawable.cam);
img.setTag(1);
} else {
img.setImageResource(R.drawable.images);
img.setTag(0);
}
}
});
我想在 Onclick
函数的图像视图中更改图像。我已经试过了:
bt_audiocapture.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (checkPermission()) {
if (bt_audiocapture.getResources().getDrawable(R.drawable.ic_mic).equals(R.drawable.ic_mic)) {
start();
bt_audiocapture.setImageResource(R.drawable.ic_stop);
} else if (bt_audiocapture.getResources().getDrawable(R.drawable.ic_stop).equals(R.drawable.ic_stop)) {
stop();
bt_audiocapture.setImageResource(R.drawable.ic_play);
} else if (bt_audiocapture.getResources().getDrawable(R.drawable.ic_play).equals(R.drawable.ic_play)) {
play();
}
}
}
});
bt_audiocapture.getResources().getDrawable(R.drawable.ic_mic)
returns 一个 Drawable
对象。您不能将它与 R.drawable.ic_mic
进行比较,即 integer
。这有点像比较 car
和 green color
。
为了完成你的任务,创建一些像 private int state = 0;
这样的字段,以及一些像
private final STATE_PLAYING = 1;
private final STATE_STOPPED = 2;
private final STATE_NONE = 0;
然后:
if (state == STATE_NONE) {
start();
bt_audiocapture.setImageResource(R.drawable.ic_stop);
state = STATE_PLAYING;
} else if (state == STATE_PLAYING) {
stop();
bt_audiocapture.setImageResource(R.drawable.ic_play);
state = STATE_STOPPED;
} else if (state == STOPPED) {
play();
state = STATE_PLAYING;
}
你的 equals
表达式总是 return false,我希望你的 if
块中的 none 被执行。您是否调试了该代码?
我建议将状态保存在另一个变量中,例如enum
.
此外,出于性能原因,您应该使用 setImageDrawable
。请参阅 setImageResource
的 javadoc:
This does Bitmap reading and decoding on the UI thread, which can cause a latency hiccup
试试这个代码,它对我有用:-
img = (ImageView) findViewById(R.id.img);
img.setTag(0);
img.setImageResource(R.drawable.images);
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (Integer.parseInt(img.getTag().toString()) == 0) {
img.setImageResource(R.drawable.cam);
img.setTag(1);
} else {
img.setImageResource(R.drawable.images);
img.setTag(0);
}
}
});