0

我有不止一个问题,但我将从更重要和有问题的一个开始:

我有一个 FrameLayout,里面有一个 ImageView。我需要获取我的活动占用的屏幕“可用区域”的大小,所以我onSizeChanged在我的视图上设置了(我扩展了ImageView课程)。这里一切正常。现在我有一个 1000x1000 的图像,我想在屏幕上显示,但没有缩放。我希望它被剪辑,真的。如果我使用(设置ImageView尺寸,我得到正确显示的图像,但是事件总是返回“1000 x 1000”自定义尺寸而不是真实的屏幕尺寸值。关于如何用真实的图像显示图像的任何想法大小(没有比例!)并且仍然让视图报告屏幕可用空间?当然,我也可以根据需要更改布局。viewObject.setLayoutParamsnew Gallery.LayoutParams(1000, 1000));onSizeChanged

. Amplexos。

4

1 回答 1

1

您是否要求获取 ImageView 的尺寸?如果是这样,那么您可以使用getLocalVisibleRect. 大致是这样完成的:

ImageView yourImageView;

public void onCreate(...){
    setContentView(...)
    yourImageView = (ImageView) findViewById(...);
    (...)
}

getImageViewSize(){
    Rect imageViewSize = new Rect();
    yourImageView.getLocalVisibleRect(imageViewSize);
    // imageViewSize now has all the values you need
    Log.d("Your log tag", "ImageView width = " + (imageViewSize.right -
            imageViewSize.left));
}

然而,有一个问题。您必须确保在视图完成布局在屏幕上之前不要尝试获取视图的大小。换句话说,如果您尝试在 onCreate 中获取其大小,则其大小将为 0。您必须事后获取它,例如在调整图像大小的同时,假设这是通过按钮完成的。(如果您使用的是 aSurfaceHolder您也可以在 surfaceCreated 回调期间调用它,但我怀疑您正在使用其中之一......)

于 2010-03-23T13:14:32.823 回答