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

Android开发如何判断ImageView当前使用的是默认图片还是切换后的图片

ImageView当前加载图片校验方案

有两种常用的稳定实现方案,你可以根据业务场景选择:


方案1:直接对比Drawable常量状态

无需额外修改原有业务逻辑,直接在校验方法里对比图片资源即可,适合简单场景:

//图片校验方法
public void validateImage() {
    // 获取当前ImageView加载的Drawable
    Drawable currentDrawable = btnImage.getDrawable();
    // 加载两个待对比的目标Drawable
    Drawable defaultDrawable = ContextCompat.getDrawable(this, R.drawable.image_one);
    Drawable changedDrawable = ContextCompat.getDrawable(this, R.drawable.image_two);

    // 异常兜底:图片未加载完成的情况
    if (currentDrawable == null || defaultDrawable == null || changedDrawable == null) {
        return;
    }

    // 通过Drawable常量状态判断是否为同一资源
    if (currentDrawable.getConstantState().equals(defaultDrawable.getConstantState())) {
        // 此处添加默认图片image_one的校验逻辑
    } else if (currentDrawable.getConstantState().equals(changedDrawable.getConstantState())) {
        // 此处添加切换后图片image_two的校验逻辑
    }
}

注意:如果你的业务中会对图片做着色、形变等二次处理,该方法可能出现对比误差,推荐使用方案2。


方案2:通过Tag标记校验(更推荐)

性能更高、逻辑更可控,不受Drawable二次处理的影响,只需要在原有逻辑上加几行标记代码即可:

  1. 首先在onCreate初始化ImageView的时候,添加初始标记
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnImage = findViewById(R.id.image_view);
    // 新增:初始化设置默认图片的标记
    btnImage.setTag(R.drawable.image_one);

    btnImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 原有业务逻辑执行成功后,切换图片同步更新标记
            btnImage.setImageResource(R.drawable.image_two);
            btnImage.setTag(R.drawable.image_two);
        }
    });
}
  1. 校验方法直接判断标记即可
//图片校验方法
public void validateImage() {
    Object tag = btnImage.getTag();
    // 异常兜底
    if (!(tag instanceof Integer)) {
        return;
    }
    int currentImgResId = (int) tag;
    if (currentImgResId == R.drawable.image_one) {
        // 此处添加默认图片image_one的校验逻辑
    } else if (currentImgResId == R.drawable.image_two) {
        // 此处添加切换后图片image_two的校验逻辑
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:39:01