【问题标题】:Create a nine patch image with code使用代码创建九个补丁图像
【发布时间】:2013-01-21 15:34:46
【问题描述】:

我正在尝试以编程方式创建九个补丁图像。我已经尝试过Griffey's 方法,但似乎无法让它发挥作用。关于如何使用该类的信息很少。我相信我错误地导入了位图。如果有人知道如何使它工作或知道更好的方法,我将非常感谢您的帮助。

我的代码:

// 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));

此屏幕截图显示了顶部的编程方法和底部使用 android 工具的典型 9patch 方法。

转换为 9patch 之前的原始图像。

【问题讨论】:

  • 经过更多测试后,我发现上述错误仅发生在旧手机和所有模拟器中。我在运行 4.1.2 的 Galax Nexus 上进行了测试,Griffey 的课程运行良好。我在运行 2.3.4 的 Droid X 和所有模拟器(包括 Galaxy Nexus-4.1.2)上进行了测试,LinearLayout 有各种奇怪的颜色,如上面的屏幕截图。
  • 我也被这个卡住了,你找到解决方法了吗?
  • 我已经用模拟器的按钮对此进行了测试。在 API 级别 10 中它似乎被破坏了,但在 API 级别 16 中它对我来说可以正常工作。
  • 大家好!在开发那个要点时,Romain Guy 告诉我,这个解决方案可能在所有版本的 Android 上都不稳定,因为 NinePatch 格式可能会发生变化。很抱歉给您带来不便,我会在要点中注明。

标签: android


【解决方案1】:

您是否尝试过强制解码器配置以确保存在 Alpha 通道?

尝试将inPreferredConfig 设置为ARGB_8888

【讨论】:

  • 感谢您的建议。不幸的是,这似乎没有效果。
【解决方案2】:

解决方案在这里:https://stackoverflow.com/a/16676419/238845。我已经在 API 级别 10 模拟器上成功测试了它。

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多