How can you tell when a layout has been drawn?

后端 未结 8 646
轻奢々
轻奢々 2020-11-22 08:07

I have a custom view that draws a scrollable bitmap to the screen. In order to initialize it, i need to pass in the size in pixels of the parent layout object. But during th

8条回答
  •  野性不改
    2020-11-22 08:34

    An alternative to the usual methods is to hook into the drawing of the view.

    OnPreDrawListener is called many times when displaying a view, so there is no specific iteration where your view has valid measured width or height. This requires that you continually verify (view.getMeasuredWidth() <= 0) or set a limit to the number of times you check for a measuredWidth greater than zero.

    There is also a chance that the view will never be drawn, which may indicate other problems with your code.

    final View view = [ACQUIRE REFERENCE]; // Must be declared final for inner class
    ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
    viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            if (view.getMeasuredWidth() > 0) {     
                view.getViewTreeObserver().removeOnPreDrawListener(this);
                int width = view.getMeasuredWidth();
                int height = view.getMeasuredHeight();
                //Do something with width and height here!
            }
            return true; // Continue with the draw pass, as not to stop it
        }
    });
    

提交回复
热议问题