2012-09-03 78 views
4

没有人试图设置9Patch按钮动态背景吗?如果它很重要,则设置按钮的宽度和高度wrap_content动态设置9patch背景

如果是,您是如何解决“黑线”问题的?

感谢

+3

不真的得到你想要问的这里 – XepterX

+0

http://stackoverflow.com/q/5079868/543711 – iTurki

+0

我需要在运行时更改Button的背景。背景是9Patch。当我这样做时,我发现9Patch不能正常工作 – Toochka

回答

5

如果你看到你的9补丁图像上画了黑点,那是因为你还没有预编译您的图像。

要在运行时将9色块图像设置为背景,必须事先编译它们,当边框被移除并编码为PNG块时。

您可以通过在您的应用程序的res/drawable文件夹中插入.9.png图像,编译它并生成.apk(在Eclipse上,右键单击您的project root > Android Tools > Export Unsigned Application Package)来实现。然后解压缩.apk文件,您将获得带有9-patch编译数据的.9.png图像。

有了您的预编译的9补丁图像,做这样的事情来加载图像:

private Drawable loadNinePatch(String path, Context context) { 
     Bitmap bitmap = BitmapFactory.decodeFile(path); 
     byte[] chunk = bitmap.getNinePatchChunk(); 
     if(NinePatch.isNinePatchChunk(chunk)) { 
      return new NinePatchDrawable(context.getResources(), bitmap, chunk, new Rect(), null); 
     } else return new BitmapDrawable(bitmap); 
} 

,然后将它设置为按钮的背景:

button.setBackgroundDrawable(loadNinePatch("/data/data/your.app/files/button_background.9.png", context)); 
+0

很棒的回答。为我节省了很多时间。 –