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
相关产品推荐
相关产品推荐

