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二次处理的影响,只需要在原有逻辑上加几行标记代码即可:
- 首先在
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); } }); }
- 校验方法直接判断标记即可
//图片校验方法 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
相关产品推荐
相关产品推荐

