返回
如何获取Android ImageView的宽度和高度?
Android
2024-03-08 19:25:59
获取 Android ImageView 的宽度和高度
问题:
获取 Android ImageView
的宽度和高度后返回 0?
原因:
- 视图在绘制前调用
getHeight()
和getWidth()
方法。 ImageView
的布局参数为wrap_content
或match_parent
。
解决方法:
- 在
onMeasure()
或onLayout()
方法中获取大小。 - 使用
ViewTreeObserver
在视图绘制完成后获取大小。
示例 1:在 onMeasure()
中获取大小
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height = ((ImageView) findViewById(R.id.img_ItemView)).getHeight();
int width = ((ImageView) findViewById(R.id.img_ItemView)).getWidth();
// 使用 height 和 width 进行后续计算...
}
示例 2:使用 ViewTreeObserver
ViewTreeObserver vto = ((ImageView) v.findViewById(R.id.img_ItemView)).getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();
int width = ((ImageView) findViewById(R.id.img_ItemView)).getWidth();
// 使用 height 和 width 进行后续计算...
// 从视图树观察者中移除监听器
vto.removeOnGlobalLayoutListener(this);
}
});
常见问题解答
-
为什么我的
ImageView
尺寸在运行时不断变化?- 布局参数为
wrap_content
或match_parent
时,ImageView
的大小取决于其父布局。
- 布局参数为
-
如何在 XML 布局文件中指定
ImageView
的固定尺寸?- 使用
android:layout_width
和android:layout_height
属性,并指定确切的像素值。
- 使用
-
我可以使用
getWidth()
和getHeight()
方法获取ImageView
的内在尺寸吗?- 不行,这些方法返回
ImageView
的绘制区域,不包括内边距和边框。要获取内在尺寸,请使用getMeasuredWidth()
和getMeasuredHeight()
方法。
- 不行,这些方法返回
-
如何获取
ImageView
中图像的实际尺寸?- 使用
Drawable
对象的getIntrinsicWidth()
和getIntrinsicHeight()
方法。
- 使用
-
为什么在
onCreate()
或onResume()
中获取ImageView
的尺寸会返回 0?- 视图在绘制之前调用这些方法。