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

Android编程中如何以编程方式获取Drawable资源?

判断ImageView显示的Drawable对应的资源ID(替代废弃的getDrawable方法)

首先要指出你原来代码的两个问题:

  1. getResources().getDrawable(int) 方法已被废弃,AndroidX推荐使用 ContextCompat.getDrawable() 替代。
  2. 直接将Drawable对象与资源ID(int类型)比较是错误的,两者类型不匹配,永远不会相等,所以你的判断逻辑根本不会生效。

以下是两种可行的解决方案:

方案一:设置Tag记录资源ID(推荐)

在给ImageView设置Drawable时,同时把对应的资源ID存为ImageView的Tag,后续直接通过Tag判断:

// 设置Drawable时
int targetResId = R.drawable.image;
// 使用ContextCompat.getDrawable替代废弃方法
Drawable drawable = ContextCompat.getDrawable(this, targetResId);
binding.image1.setImageDrawable(drawable);
// 把资源ID存到Tag中
binding.image1.setTag(targetResId);

之后判断时直接取Tag对比:

if (binding.image1.getTag() != null && (int) binding.image1.getTag() == R.drawable.image) {
    // 执行你的业务逻辑
}

方案二:通过Drawable的ConstantState对比

如果无法主动设置Tag(比如Drawable是通过其他组件自动设置的),可以通过Drawable的ConstantState来判断是否为同一资源:

Drawable targetDrawable = ContextCompat.getDrawable(this, R.drawable.image);
Drawable currentDrawable = binding.image1.getDrawable();

// 注意先判空,避免空指针异常
if (currentDrawable != null && targetDrawable != null 
    && currentDrawable.getConstantState().equals(targetDrawable.getConstantState())) {
    // 执行你的业务逻辑
}

注意:此方法仅适用于同一资源文件的Drawable,若两个不同资源文件的Drawable内容完全一致,可能会出现误判,因此优先选择方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:45