测量 Android 中 "fitCenter" imageView 的边距
Measuring margin of a "fitCenter" imageView in Android
给定一个像这样的简单 RelativeLayout:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#0fffff">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/img001" />
</RelativeLayout>
布局边框和图片边框之间的 left/top 间距取决于 imageView 中加载的图片的 W/H 比例。
在此布局中显示图像后,我如何知道(以编程方式)实际边距(青色区域的宽度和高度)?
如果你知道ImageView
的宽度,像这样
int ivWidth = iv.getMeasuredWidth();
和布局的总宽度(你的RelativeLayout
),像这样
int layoutWidth = yourLayout.getWidth();
然后,你可以很容易地得到水平边距,像这样
int horizontalMargin = (layoutWidth - ivWidth)/2;
身高也是如此。
您应该在计算布局尺寸后调用 getWidth
和 getHeight
等函数,如 Veer 和 Khan 在 How to get the width and height of an Image View in android? 上的回答所述。
在 onCreate
中调用 getWidth
或 getHeight
将 return 0.
此方法将计算 新矩形,它在 FIT_CENTER 和所有 其他相关值之后界定对象。
它应该适用于所有对象和容器的情况。
public static Rect calculateFitCenterObjectRect(float containerWidth, float containerHeight, float objectWidth, float objectHeight) {
// scale value to make fit center
double scale = Math.min( (double)containerWidth / (double)objectWidth, (double)containerHeight / (double)objectHeight);
int h = (int) (scale * objectHeight); // new height of the object
int w = (int) (scale * objectWidth); // new width of the object
int x = (int) ((containerWidth - w) * 0.5f); // new x location of the object relative to the container
int y = (int) ((containerHeight - h) * 0.5f); // new y location of the object relative to the container
return new Rect(x, y, x + w, y + h);
}
您可以使用 FrameLayout 将视图放置在您想要的任何位置,在使用之前的方法以及缩放对象的新 x、y、宽度、高度之后。
给定一个像这样的简单 RelativeLayout:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#0fffff">
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/img001" />
</RelativeLayout>
布局边框和图片边框之间的 left/top 间距取决于 imageView 中加载的图片的 W/H 比例。
在此布局中显示图像后,我如何知道(以编程方式)实际边距(青色区域的宽度和高度)?
如果你知道ImageView
的宽度,像这样
int ivWidth = iv.getMeasuredWidth();
和布局的总宽度(你的RelativeLayout
),像这样
int layoutWidth = yourLayout.getWidth();
然后,你可以很容易地得到水平边距,像这样
int horizontalMargin = (layoutWidth - ivWidth)/2;
身高也是如此。
您应该在计算布局尺寸后调用 getWidth
和 getHeight
等函数,如 Veer 和 Khan 在 How to get the width and height of an Image View in android? 上的回答所述。
在 onCreate
中调用 getWidth
或 getHeight
将 return 0.
此方法将计算 新矩形,它在 FIT_CENTER 和所有 其他相关值之后界定对象。
它应该适用于所有对象和容器的情况。
public static Rect calculateFitCenterObjectRect(float containerWidth, float containerHeight, float objectWidth, float objectHeight) {
// scale value to make fit center
double scale = Math.min( (double)containerWidth / (double)objectWidth, (double)containerHeight / (double)objectHeight);
int h = (int) (scale * objectHeight); // new height of the object
int w = (int) (scale * objectWidth); // new width of the object
int x = (int) ((containerWidth - w) * 0.5f); // new x location of the object relative to the container
int y = (int) ((containerHeight - h) * 0.5f); // new y location of the object relative to the container
return new Rect(x, y, x + w, y + h);
}
您可以使用 FrameLayout 将视图放置在您想要的任何位置,在使用之前的方法以及缩放对象的新 x、y、宽度、高度之后。