How do I find the width/height of ImageView?

馋奶兔 提交于 2019-12-04 06:46:45

问题


My question is similar to this question. I've used this code to extend ImageView to form TouchImageView. In my onCreate() method, I want to call

setImage(Bitmap bm, int displayWidth, int displayHeight)

but I don't know the width or height to use. When I call getHeight(), it gives me zero.

I tried to avoid the 0 using kcoppock's answer to the previously mentioned question, but was unsuccessful. The onPreDraw() listener is called several times per second and I can't figure out how to only call it once.


回答1:


That's a brittle approach for something like this. Android Views are measured by their parent View using the onMeasure method. By providing an initial size to a setImage method to scale to (and especially if you set it based on the display size) you're inviting complexity whenever you want to nest this View within others. Larger screen devices like tablets are a good example of this.

A more idiomatic approach would implement the setImage method of TouchImageView without the width/height parameters at all. Instead it would defer setting the scale and matrices until measurement and implement onMeasure something like this:

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;
    }
}

Where the setInitialScale method does everything that the linked setImage method does after the call to super.setImageBitmap. setImage should also set the mNeedsInitialScale field to true.

This way you will never need to worry about the initial size to use, it will be obtained automatically from the View during normal measurement whenever a new image is set.




回答2:


the ImageViews dimensions are 0 until your Activity draw it on the screen. You could use Activitys onFocusChanged to set the Bitmap and get correct Dimensions if you are just looking for DisplayWidth and height you can call

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

and ask Display for its dimensions



来源:https://stackoverflow.com/questions/6590031/how-do-i-find-the-width-height-of-imageview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!