Android 获取9补丁内容区域的大小

Android 获取9补丁内容区域的大小,android,nine-patch,Android,Nine Patch,在我的应用程序中,我有一个功能,你可以在图像周围放置一个框架 我使用setBackground(可绘制)将框架的图像应用于ImageView。单击ImageView时,我想将内容区域(帧中包含的图像)放大到屏幕大小。为此,我需要知道整个视图和内容区域之间的差异,即边框的厚度 有没有办法获得内容区域的大小?(访问ImageView的View.getWidth()将提供内容+边框。我正在尝试获取边框/填充。) 这里有一种替代方法: 9patch框架的水平和垂直边界不应分别垂直和水平拉伸。所以,垂直边

在我的应用程序中,我有一个功能,你可以在图像周围放置一个框架

我使用
setBackground(可绘制)
将框架的图像应用于
ImageView
。单击
ImageView
时,我想将内容区域(帧中包含的图像)放大到屏幕大小。为此,我需要知道整个视图和内容区域之间的差异,即边框的厚度

有没有办法获得内容区域的大小?(访问ImageView的
View.getWidth()
将提供内容+边框。我正在尝试获取边框/填充。)


这里有一种替代方法:

9patch框架的水平和垂直边界不应分别垂直和水平拉伸。所以,垂直边框的宽度和水平边框的高度是恒定的。您可以使用任何支持测量和测量这些长度的图像编辑器打开9patch


将这些值用作内容视图的边距或填充。为所有DPI提供一个9补丁应该可以工作,因为系统会将其拉伸以获得更高的DPI,但您的填充/边距将以DPs为单位,因此它应该与帧大小相同。

这里有一种替代方法:

9patch框架的水平和垂直边界不应分别垂直和水平拉伸。所以,垂直边框的宽度和水平边框的高度是恒定的。您可以使用任何支持测量和测量这些长度的图像编辑器打开9patch

将这些值用作内容视图的边距或填充。为所有DPI提供一个9补丁应该可以工作,因为系统会将其拉伸以获得更高的DPI,但您的填充/边距将以DPs为单位,因此它应该与帧大小相同。

您可以使用:

Rect padding = new Rect();
view.getBackground().getPadding(padding);
int contentWidth = view.getWidth() - padding.left - padding.right;
int contentHeight = view.getHeight() - padding.top - padding.bottom;
如果您的背景是一个九块补丁,则getPadding方法将返回可绘制补丁的插入,您可以使用:

Rect padding = new Rect();
view.getBackground().getPadding(padding);
int contentWidth = view.getWidth() - padding.left - padding.right;
int contentHeight = view.getHeight() - padding.top - padding.bottom;
如果您的背景是一个九块补丁,getPadding方法将返回可绘制的

replace
view.getWidth()
with
view.getMeasuredHeight()
。replace
view.getWidth()
with
view.getMeasuredHeight()