You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Java)中如何比较图片?点击按钮切换图片遇比较难题

Android图片切换:解决ImageView比较失效的问题

你这段代码的核心问题是每次点击都创建了新的ImageView实例,用==比较的是对象的内存引用地址,而不是ImageView当前显示的图片资源。你新建的dog和goofy是完全独立的对象,和界面上的img永远不是同一个引用,所以if(img==dog)永远为false,导致切换逻辑完全失效。

正确的实现方式

不要通过比较ImageView对象来判断当前显示的图片,而是直接记录当前显示的资源ID,或者判断ImageView的Drawable资源:

方案1:用成员变量记录当前资源ID(推荐)

在你的Activity/Fragment类中定义一个成员变量保存当前显示的图片资源ID,点击按钮时直接比较这个ID:

// 类成员变量
private int currentImageResId = R.drawable.dog;
private ImageView img; // 提前通过findViewById初始化界面上的ImageView

// 按钮点击事件处理
button.setOnClickListener(v -> {
    if (currentImageResId == R.drawable.dog) {
        img.setImageResource(R.drawable.goofydog);
        currentImageResId = R.drawable.goofydog;
    } else {
        img.setImageResource(R.drawable.dog);
        currentImageResId = R.drawable.dog;
    }
});

方案2:通过Drawable的ConstantState判断

如果不想额外维护成员变量,可以通过获取ImageView当前Drawable的ConstantState来判断是否为同一资源:

// 按钮点击事件处理
button.setOnClickListener(v -> {
    Drawable currentDrawable = img.getDrawable();
    Drawable dogDrawable = getResources().getDrawable(R.drawable.dog);
    
    if (currentDrawable.getConstantState().equals(dogDrawable.getConstantState())) {
        img.setImageResource(R.drawable.goofydog);
    } else {
        img.setImageResource(R.drawable.dog);
    }
});

这种方式利用Drawable的缓存状态来判断是否对应同一资源文件,比直接比较Drawable对象更可靠。

内容的提问来源于stack exchange,提问作者SarcasticSlav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:55:17