android - 9 补丁可绘制尺寸 Android。不同的密度如何处理非拉伸(stretch)区域?

标签 android drawable nine-patch

enter image description here

考虑上图。 - 虚线标定了我将从 photoshop 文件中切出的 9-Patch png。我需要它来创建一个弹出框。 - 盒子包含一个 dropShadow,如这张照片中的测量工具所示。 - 粉红色线条显示我将如何使用 draw9Patch 工具创建 9-Patch。

我的问题是:如果我有一个以 9-Patch 为背景的 View “容器”,我需要确保其 subview 始终位于白框内。我打算为此使用填充。我打算将填充设置为等于测量工具。因此,如果它在 photoshop 中为 30px,我将为容器设置 layout_paddingLeft"=30dp"。 (设计在 MDPI,所以我认为这种转换没问题)。然而,不同密度的屏幕如何处理 9path。例如,测量区域是 30px 还是 30dip

最佳答案

通过draw9patch 工具,您可以定义:

enter image description here

  • 垂直拉伸(stretch):左侧黑色像素点
  • 水平拉伸(stretch):顶部黑色像素
  • 垂直内容:右侧的黑色像素
  • 水平内容:底部的黑色像素

请注意,拉伸(stretch)像素不必是连续的,因此您可以将某些特定切片排除在拉伸(stretch)之外(查看上面的弹出箭头)。同时,您可以合理地了解您的内容将放置在何处,只需查看右侧的预览,其中包含紫色区域。正如您所想的那样,您不必指定任何填充在您的布局中: View 将使用您设置为背景的 9patch 考虑这些值

非拉伸(stretch)区域与像素密度成比例。因此,如果您将上面的 9patch 设置为 mdpi Assets ,则最左上角的切片将在 50x40 像素区域 @mdpi 和 100x80 像素区域 @xhdpi 中呈现。最左边的拉伸(stretch)区域根据 dpi 排列宽度,而高度根据内容排列。其他拉伸(stretch)切片的工作方式类似。

在这两种情况下,处理“低分辨率”9patch 都会导致难看的像素化伪像。一个可能的解决方案是为每个支持的 dpi 提供不同的 9patch,或者只定义更高的 dpi (xhdpi) 并让 Android 相应地缩小它们。

内容边界也被处理为 dp,所以它们根据像素密度缩放。例如:在原始 9patch 中定义为 40px@mdpi 的左填充将转换为 80px@xhdpi,因此内容永远不会溢出给定的边界。 请注意,您甚至可以通过布局中的 padding* 属性覆盖 9patch 中指定的内容边界。

关于android - 9 补丁可绘制尺寸 Android。不同的密度如何处理非拉伸(stretch)区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14972657/

相关文章:

android-layout - 使用 9-patch 图像进行应用程序开发

java - Android App : Log-in to website, 维护 session - Java

android - Playstore 中的更新大小与下载大小相同

android - 添加媒体路由器转换按钮时出错

java - 在 ListView 中设置ImageDrawable

安卓 Gradle : can't find symbol variable

android - Git 停止在 Android studio 上工作

Android:圆形图像的框架

Android 9 补丁图像仅对单色方形图像有用?

android - 定义布局内容区域