마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰를 상속받은 커스텀뷰 객체를만들어 레이아웃에 넣고 measure 을호출하면

0 추천
HeadView hd = new HeadView(mCtx);  // View 상속받은커스텀뷰
            cSheetHead.addView(hd);
            int widthMeasureSpec = MeasureSpec.makeMeasureSpec(GlobalApp.iViewWidth, MeasureSpec.EXACTLY);
            int heightMeasureSpec = MeasureSpec.makeMeasureSpec(GlobalApp.iViewHeight, MeasureSpec.EXACTLY);
            hd.measure(widthMeasureSpec, heightMeasureSpec);

위와같이 뷰를 상속받은 커스텀뷰 객체를만들어 레이아웃에 넣고 measure 을호출하면

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

       ..................................................................
        //설정한크기가 widthSize, heightSize 에 그대로 들어있습니다
       //This mehod must be called by onMeasure(int, int) to store the measured width and measured height.
        setMeasuredDimension(widthSize, heightSize);
        
    }

커스텀뷰의 위함수가호출되고 setMeasuredDimension(widthSize, heightSize); 에 정확한 width height 값이 설정되고

아래의 함수가 호출되는데

protected void onSizeChanged (int w, int h, int oldw, int oldh)
     {
         if(w != oldw)
         {
             if(w == 0 || h == 0)
                 return;
       //  h 값이 0 으로 되어있어서 여기로 넘어오지를 못합니다

      // 그리고 onDraw 가 호출되지를 않아서 그림이 표시가되지않습니다

     // 이거 왜 이런건가요 onDraw 호출되게하려면 어떻게해야되나요?

    // setMeasuredDimension 에서 width height 값이 정해져있는데 왜 h 값이 0 으로나오는지....

             invalidate();
         }
       
     }
참참참 (3,100 포인트) 님이 2015년 3월 13일 질문

1개의 답변

0 추천
getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            // This method was deprecated in API level 16. Use #removeOnGlobalLayoutListener instead
            getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
    }
});

 

 

 

aucd29 (218,390 포인트) 님이 2015년 3월 13일 답변
...