【Android】.9图的一个BUG?

【问题】

本想通过使用 .9 图来取代被拉伸的png图,但是却遇到了问题:
在 java 代码中通过控制 ImageView/ImageButton 的背景和前景时,出现了很意外的结果---前景消失了;

【效果图】

目录结构



主要代码 



得到了不想要的结果


img_befor.gif

想要的最终效果是
img_after.gif

【分析】

经过一番查找和了解,知道了原因:

  1. 其中:我设置的ImageView属性:layout_height 和 layout_width 为固定值(48dp,80dp),padding 为 14dp ;引入的图片大小:48x48px ;
  2. 查找结果是:在代码中设置 .9 图会重置 padding;
  3. 前景并不是消失不见,而是已经不在可见范围内(我在上面设置了固定值,如果设置为 wrap_content 或者 match_parent 运行后发现前景还在);
【解决办法】

先保留 padding 的值,当绘制完 .9 图的背景后,重新设置 padding 值

 
 
private void setBgAndImage(ImageView v, int bg, int image) {
int pL = v.getPaddingLeft();
int pR = v.getPaddingRight();
int pT = v.getPaddingTop();
int pB = v.getPaddingBottom();
v.setBackgroundResource(bg);
v.setPadding(pL, pT, pR, pB);
v.setImageResource(image);
}
【参考资料】

《 setBackgroundResource 9 patch 图会影响 LinearLayout 的 Padding》http://blog.csdn.net/id19870510/article/details/40425267
《Where'd padding go, when setting background Drawable?》http://stackoverflow.com/questions/10095196/whered-padding-go-when-setting-background-drawable

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值