16

在 Draw 9-patch 中,一切看起来都很好。但是,我的 SDK 说 9-patch png 格式不正确。因为我有类似 11-patch png 的东西。因为我不希望小抓取区域被缩放。如何让它工作?屏幕截图描述了一切:

替代文字

控制台中的错误消息:

ERROR: 9-patch image /res/drawable-hdpi/top_complete.9.png malformed.
        Can't have more than one marked region along edge.
        Found at pixel #10 along bottom edge.
ERROR: Failure processing PNG image /res/drawable-hdpi/top_complete.9.png
4

7 回答 7

33

我相信您的问题是您将内容区域分成两部分,这是不允许的。该工具对顶部和左侧边框的处理方式与底部和右侧边框的处理方式不同。顶部和左侧描述什么是可拉伸的,底部和右侧定义内容区域(必须是连续的)。

选中复选框以显示内容区域并使用它来查看我在说什么。

替代文字

于 2010-09-17T07:56:39.107 回答
1

我不会把它分成左右,我会删除 9-patch 中的 == 并将其用作具有中心和底部重力的单独图像,这样它就会始终保持在你想要的中间位置。

只是一个提示:我总是将“缩放”部分减少到 1 像素宽度/高度以获得最小化的图像。

于 2010-09-17T09:33:34.513 回答
1

替代文字

没有抓取器的 9-Patch PNG

替代文字

按钮的 XML:

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textColor="#FFFFFF"
  android:textStyle="bold"
  android:textSize="11sp"
  android:id="@+id/ButtonTop"
  android:background="@drawable/top_just_bg"
  android:drawableBottom="@drawable/top_dropper"
  android:gravity="center"
  android:paddingLeft="15sp"
  android:paddingRight="15sp"
  android:paddingTop="3sp"
  android:text="There we go! It's working... ;)"></Button>

Padding 和 sp-Values 的使用好吗?

于 2010-09-17T11:49:33.227 回答
1

由于原始问题尚未解决:您可以将图像分成两层,一层NinePatchDrawable用于可拉伸部分,一层(居中)用于静态图像。然后只需使用 aLayerDrawable将它们绘制在彼此之上。是一个很好的例子,说明如何使用适当的<layer-list>标签。这就是如何以正确的方式做到这一点。;-)

于 2010-09-17T19:06:45.980 回答
0

将原始图像一分为二并使用它们。

于 2010-09-17T07:40:23.407 回答
0

上面的图片看起来不错,预览显示它看起来还可以。

当您尝试使用设备时,设备的错误信息是什么?

您确定边缘上的每个像素都是白或全黑吗?
即使是边缘上最轻微的透明度也会让 Android 感到不安。


编辑:
啊哈,错误信息揭示了问题。
只有图像的顶部边缘决定了哪些区域将被拉伸。

移除底部边缘的黑色像素,假设这只是一个抓取栏,其中没有内容(例如文本)。

否则,只需在底部边缘填充中央间隙,以便在紫色区域显示文本内容。

于 2010-09-17T07:55:00.730 回答
0

查看所有边框......顶部和左侧两个(将被缩放)和右侧和底部 1 个(不会被缩放)。

在此处输入图像描述

于 2015-10-14T00:03:36.043 回答