9-Patch可绘制尺寸Android.不同密度如何处理未拉伸区域?

Jac*_*ney 14 android drawable nine-patch

在此输入图像描述

考虑上面的图像. - 虚线划分了9-Patch png,我将从photoshop文件中切出.我需要它来创建一个弹出框. - 该盒子包含一个dropShadow,如本照片中的测量工具所示. - 粉色线条用于显示我将如何使用draw9Patch工具创建9-Patch.

我的问题是:如果我有一个带有9-Patch的View"Container"作为背景我需要确保它的子视图总是在白框内.我打算用这个填充.我打算将填充设置为与测量工具相等.因此,如果它在photoshop中为30px,我会layout_paddingLeft"=30dp"为容器设置.(设计是在MDPI,所以我假设这个转换是可以的).但是,不同密度的屏幕如何处理9路径.例如,测量面积是30px还是30dip

a.b*_*cci 23

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

在此输入图像描述

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

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

无拉伸区域随像素密度而缩放.因此,如果将上面的9patch设置为mdpi资源,则最左上角的切片将以50x40像素区域@mdpi呈现,并在100x80像素区域中呈现@xhdpi.最左边的拉伸区域根据dpi排列它们的宽度,而高度根据内容排列.其他拉伸切片以类似的方式工作.

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

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