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

如何判断ImageView显示的是XML预设drawable还是动态设置的Bitmap?

解决方案

方案1:使用View Tag标记(推荐,稳定性最高)

通过给ImageView附加自定义标记区分显示状态,逻辑完全可控,不受Drawable类型、系统缓存等因素影响,适配所有场景。

实现步骤

  1. 初始化时标记初始状态
private static final int TAG_DYNAMIC_BITMAP = -1; // 自定义常量表示已设置动态Bitmap

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    ImageView ppImageView = findViewById(R.id.ppImageView);
    // 初始状态标记为原始drawable的资源ID,使用带key的重载避免Tag冲突
    ppImageView.setTag(R.id.ppImageView, R.drawable.globe1);
}
  1. 动态设置Bitmap时同步修改标记
ppImageView.setImageBitmap(ppBitmap);
ppImageView.setTag(R.id.ppImageView, TAG_DYNAMIC_BITMAP);
  1. 状态判断逻辑
int currentTag = (int) ppImageView.getTag(R.id.ppImageView);
if (currentTag == R.drawable.globe1) {
    // 当前显示的是初始的globe1 drawable资源
} else {
    // 当前显示的是动态设置的ppBitmap
}

方案2:直接对比Drawable内容

setImageBitmap方法会自动将传入的Bitmap封装为BitmapDrawable,通过对比当前Drawable和原始globe1的ConstantState即可区分,适合简单场景使用。

// 获取原始globe1的Drawable实例
Drawable originalDrawable = AppCompatResources.getDrawable(this, R.drawable.globe1);
// 获取ImageView当前显示的Drawable
Drawable currentDrawable = ppImageView.getDrawable();

if (originalDrawable != null && currentDrawable != null 
    && originalDrawable.getConstantState().equals(currentDrawable.getConstantState())) {
    // 当前显示的是初始的globe1 drawable资源
} else {
    // 当前显示的是动态设置的ppBitmap
}

注意:如果globe1是矢量图、或者系统开启了Drawable缓存复用,该方案可能出现对比误差,优先选择方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:03