And*_*dre 13 graphics android bytearray nine-patch android-drawable
我使用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(上/左/下/右).
Jim*_*aca 16
更新代码后,它对我有用.我认为颜色大小因为某些原因而变得不开心(基于android源代码中的注释,每个补丁都有一个颜色提示,设置少于这个案例中的部分数量9似乎会导致问题).我还没有测试你的图像.
public static NinePatch createFixedNinePatch(Resources res, Bitmap bitmap, int top, int left, int bottom, int right, String srcName){
ByteBuffer buffer = getByteBufferFixed(top, left, bottom, right);
NinePatch patch = new NinePatch(bitmap, buffer.array(), srcName);
return patch;
}
public static ByteBuffer getByteBufferFixed(int top, int left, int bottom, int right) {
//Docs check the NinePatchChunkFile
ByteBuffer buffer = ByteBuffer.allocate(84).order(ByteOrder.nativeOrder());
//was translated
buffer.put((byte)0x01);
//divx size
buffer.put((byte)0x02);
//divy size
buffer.put((byte)0x02);
//color size
buffer.put(( byte)0x09);
//skip
buffer.putInt(0);
buffer.putInt(0);
//padding
buffer.putInt(0);
buffer.putInt(0);
buffer.putInt(0);
buffer.putInt(0);
//skip 4 bytes
buffer.putInt(0);
buffer.putInt(left);
buffer.putInt(right);
buffer.putInt(top);
buffer.putInt(bottom);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
buffer.putInt(NO_COLOR);
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
把我到目前为止发现的所有内容放在一起,并稍微磨练一下:
Res_png_9patchAndroid版本之间的结构(字节块进入)似乎没有区别(请参阅http://code.metager.de/source/xref/android),因此看起来不像原因.
关于九个补丁绘图的其他答案表明每个区域(尤其是可拉伸的区域)应该至少为2x2像素(如果不是3x3),但在更小的区域之外更好.
但是,分配一些字节块的方式看起来可以更新.尝试将第4个字节设置为9(我认为补丁的数量),NO_COLOR在末尾再添加7个s并将其大小调整为56 +(7 x 4)= 84个字节
| 归档时间: |
|
| 查看次数: |
4855 次 |
| 最近记录: |