gpt4 book ai didi

Android:如何从输入流创建 9patch 图像?

转载 作者:搜寻专家 更新时间:2023-11-01 08:11:18 24 4
gpt4 key购买 nike

我正在使用下面的代码来实例化一个 9patch 图像并将其设置为按钮的背景。下图显示了不理想的结果。

InputStream = MyClass.class.getResourceAsStream("/images/btn_default_normal.9.png");
Drawable d = NinePatchDrawable.createFromStream(in, null);
button.setBackgroundDrawable(d);

enter image description here

也尝试了下面的代码,这似乎导致了由原生 android 代码引起的 ANR。目前还不清楚发生了什么,但应用程序在没有警告的情况下存在,日志说了一些关于 ANR 的信息,我在日志中看到了很多以下堆栈跟踪。

InputStream = MyClass.class.getResourceAsStream("/images/btn_default_normal.9.png");
Bitmap bitmap = BitmapFactory.decodeStream(in);
byte[] chunk = bitmap.getNinePatchChunk();
NinePatchDrawable drawable = new NinePatchDrawable(bitmap, chunk, new Rect(), null);
button.setBackgroundDrawable(drawable);



at android.graphics.NinePatch.validateNinePathChunk(Native Method)
at android.graphics.NinePatch.<init>
at android.graphics.drawable.NinePatchDrawable.<init>

最佳答案

createFromStream() 方法是 Drawable 类的一部分(NinePatchDrawable 对其进行了扩展)因此它返回给您的是一个普通的 Drawable 对象,而不是 9-patch 。这就是为什么你的按钮看起来像我怀疑的那样。

您要在 9-patch 中制作的图像在哪里?从您的示例看来,它可能包含在您的应用程序资源中(也许在可绘制文件夹之一中?)如果是这种情况,是否有理由使用可绘制对象的 ID 不适用于您的情况?你应该能够做这样的事情:

button.setBackgroundResource(R.drawable.btn_default_normal);

如果我遗漏了某些东西(我肯定会遗漏),并且您有理由不能使用资源 ID。从文档看来,您的第二个代码块更接近您想要的。

但是您正在使用的构造函数已被弃用。 Try using this one instead.看起来像这样:

InputStream in = MyClass.class.getResourceAsStream("/images/btn_default_normal.9.png");
Bitmap bitmap = BitmapFactory.decodeStream(in);
byte[] chunk = bitmap.getNinePatchChunk();
NinePatchDrawable drawable = new NinePatchDrawable(getResources(), bitmap, chunk, new Rect(), null);
button.setBackgroundDrawable(drawable);

唯一的区别是第一个参数应该是您的 Applications Resources 对象。

但是,老实说,我可以发誓我曾在某处读到该系统无法将 NinePatchDrawables 作为对象动态使用。尽管 NinePatchDrawable 对象存在,但我的印象是它不起作用/不打算成为公共(public) API 的一部分

编辑:

这个问题的答案有帮助吗? Create a NinePatch/NinePatchDrawable in runtime

此外,我在该问题底部的回答准确地提醒了我为什么我认为它不工作/不适用于部分公共(public) API docs for the getNinePatchChunk

Returns an optional array of private data, used by the UI system for some bitmaps. Not intended to be called by applications.

但看起来他们还是设法让它工作了。

关于Android:如何从输入流创建 9patch 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com