如何找到ImageView的宽度/高度?

时间:2011-07-05 23:32:49

标签: android image height width

我的问题类似于this question。我使用this code扩展了ImageView以形成TouchImageView。在我的onCreate()方法中,我想调用

setImage(Bitmap bm, int displayWidth, int displayHeight)

但我不知道要使用的宽度或高度。当我调用getHeight()时,它给我零。

我尝试使用kcoppockpreviously mentioned question的回答来避免使用0,但未成功。 onPreDraw()监听器每秒被调用几次,我无法弄清楚如何只调用一次。

2 个答案:

答案 0 :(得分:3)

对于这样的事情来说,这是一种脆弱的方法。 Android视图使用onMeasure方法按其父视图进行衡量。通过为要扩展的setImage方法提供初始大小(特别是如果您根据显示大小设置它),只要您希望将此View嵌套在其他视图中,就会引发复杂性。像平板电脑这样的大屏幕设备就是一个很好的例子。

更惯用的方法是在没有宽度/高度参数的情况下实现TouchImageView的setImage方法。相反,它会推迟设置比例和矩阵,直到测量并实现onMeasure这样的事情:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    if (mNeedsInitialScale) { // Set by setImage when a new image is set
        // The measured width and height were set by super.onMeasure above
        setInitialScale(getMeasuredWidth(), getMeasuredHeight());
        mNeedsInitialScale = false;
    }
}

setInitialScale方法在调用setImage后执行链接super.setImageBitmap方法执行的所有操作的位置。 setImage还应将mNeedsInitialScale字段设置为true

这样您就不必担心要使用的初始尺寸,只要设置了新图像,就会在正常测量期间从视图中自动获取。

答案 1 :(得分:1)

ImageViews尺寸为0,直到您的“活动”在屏幕上绘制它。您可以使用Activity onFocusChanged来设置位图并获得正确的尺寸 如果你只是在寻找DisplayWidth和高度,你可以调用

Display d = getSystemService(WINDOW_SERVICE).getDefaultDisplay();

并询问展示尺寸