【Android】.9图的一个BUG?

【问题】

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

【效果图】

目录结构



主要代码 



得到了不想要的结果


img_befor.gif

想要的最终效果是
img_after.gif【Android】.9图的一个BUG?_第1张图片

【分析】

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

  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

你可能感兴趣的:(【Android】.9图的一个BUG?)