返回

如何获取Android ImageView的宽度和高度?

Android

获取 Android ImageView 的宽度和高度

问题:

获取 Android ImageView 的宽度和高度后返回 0?

原因:

  • 视图在绘制前调用 getHeight()getWidth() 方法。
  • ImageView 的布局参数为 wrap_contentmatch_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);
    }
});

常见问题解答

  1. 为什么我的 ImageView 尺寸在运行时不断变化?

    • 布局参数为 wrap_contentmatch_parent 时,ImageView 的大小取决于其父布局。
  2. 如何在 XML 布局文件中指定 ImageView 的固定尺寸?

    • 使用 android:layout_widthandroid:layout_height 属性,并指定确切的像素值。
  3. 我可以使用 getWidth()getHeight() 方法获取 ImageView 的内在尺寸吗?

    • 不行,这些方法返回 ImageView 的绘制区域,不包括内边距和边框。要获取内在尺寸,请使用 getMeasuredWidth()getMeasuredHeight() 方法。
  4. 如何获取 ImageView 中图像的实际尺寸?

    • 使用 Drawable 对象的 getIntrinsicWidth()getIntrinsicHeight() 方法。
  5. 为什么在 onCreate()onResume() 中获取 ImageView 的尺寸会返回 0?

    • 视图在绘制之前调用这些方法。