在 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。这有点像比较 cargreen 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);

            }
        }
    });