我使用Brian Griffey提供的优秀要点(在此处找到),在Android 3.0+上成功构建了一个9patch drawable .
基本上我从网络加载原始(无补丁)图形文件,文件名包含我需要使用的上限,以便相应地缩放图像.然后我使用这些值与上面找到的类,并应用该图像作为背景的各种元件(如TextView,ImageButton,Button,ViewGroup,等等).
这可以完美地工作,你可以在这里看到:

但是,在Android 2.3.x上运行相同的代码会产生结果:

我查看了Android中使用的源代码来解析9patch图像(此处和此处),但没有找到使其正常工作的方法.我已经尝试了几乎所有我可以抛出的东西都无济于事.
为了记录,9patch由每个轴上的三列组成,一个固定,一个可伸缩,一个固定.
这里希望别人之前解决过这个问题.
提前致谢.
编辑我只对在Android 2.3及更高版本上复制此行为感兴趣(我最初有2.x).
编辑#2这个要点准确描述了我正在尝试做的事情 +源图像:
编辑#3图像的大小为22px/58px(宽度/高度),插图为14/6/14/6(上/左/下/右).
我试图以编程方式创建九个补丁图像.我尝试过Griffey的方法,但似乎无法让它发挥作用.关于如何使用该课程的信息非常少.我相信我错误地导入了位图.如果有人知道如何让这个工作或知道更好的方式,我将非常感谢你的帮助.
我的代码:
// Dynamically create the 9patch image and apply it to a LinearLayout
LinearLayout llcode = (LinearLayout) findViewById(R.id.llcode);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.white_button);
Drawable np = NinePatchBitmapFactory.createNinePathWithCapInsets(getResources(), bitmap, 15, 15, 16, 16, null);
llcode.setBackgroundDrawable(np);
// The following code using the actual 9patch image: white_button_np.9.png
LinearLayout llxml = (LinearLayout) findViewById(R.id.llxml);
llxml.setBackgroundDrawable(getResources().getDrawable(R.drawable.white_button_np));
Run Code Online (Sandbox Code Playgroud)
此屏幕截图显示了顶部的编程方法和底部使用android工具的典型9patch方法.

原始图像在转换为9patch之前.

有没有人试图动态设置9Patch背景的按钮?如果重要,则按钮的宽度和高度设置为wrap_content
如果是的话,你是如何解决"黑线"问题的?
谢谢
我的问题是:
我需要创建一个使用NinePatch创建的重新缩放的位图.
我当前的系统从NinePatch文件创建一个Bitmap.然后将其输入NinePatch(或NinePatchDrawable).然后我需要调整它并输出到另一个Bitmap.
我已审阅本,它帮了不少忙.
这是我目前的代码:
try {
Bitmap bitmap1 = BitmapFactory.decodeStream(getAssets().open("gfx/head.9.png"));
// Using NinePatch?
NinePatch patch = new NinePatch(bitmap1, bitmap1.getNinePatchChunk(), null);
// Or NinePatchDrawable?
NinePatchDrawable patch = new NinePatchDrawable(bitmap1, bitmap1.getNinePatchChunk(), new Rect(), null);
// Set dimensions from NinePatch and create new bitmap
// Bitmap bitmap2 = ?
}
catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)