Android-相同BitmapDrawable在不同ImageView显示问题

本文探讨了在Android开发中使用ImageView显示BitmapDrawable时出现的图片缩放问题,尤其是在不同大小的ImageView间切换显示同一张图片时所遇到的问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这个问题首先在内存中有一份BitmapDrawable对象,在界面中有两个大小不一样的ImageView(A和B),在显示同一份BitmapDrawable时,先显示大的ImageView-A,再显示小的ImageView-B,这样开始没有问题,结果在调用显示方法让A重新显示这张图片,结果这张图片在A中显示变小了。

    其实网上也有相关网友遇到这样的问题,例如用ImageView A做了个按钮,(用id引用drawable中的图片a),并做了个半透明效果(通过setAlpha),当用户Touch这个A时才不透明。现在我在另一处地方也需要用到图片a(不需要半透明行为),也是建立了一个新ImageView B并用id引用。然后你看看最终显示效果,会发现A和B保持着同样的外观,也就是要么A跟B一样不透明,要么B跟A一样半透明。

    如果想了解更多可以看这个网址:http://www.cnblogs.com/lbeing/archive/2011/06/13/2080168.html,在这篇文章中了解到,谷歌在设计drawable对象的时候,为了避免浪费内存,相同图片的drawable会共享一个Constant state对象,所以在图片已经变小了,如果你要显示在大的ImageView上面,它记录的是小图片的Constant state状态。所以你只要调用mutate()方法,就可以解决这个问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值