Android 학습 노트 (1) View, View Group 의 측정 그리 기

4128 단어 android
UI 인터페이스 구조
큰 것 부터 작은 것 까지 바깥쪽 에 Activity > > Phone Window > > DecorView > > TitleView + ContentView 를 포함 하고 있 습 니 다.
그 중
  • DecorView 는 전체 응용 창의 루트 View 입 니 다.
  • ContentView 는 content 라 는 ID 의 FrameLayout 이 고 *. xml 레이아웃 파일 은 안에 설 치 됩 니 다.
  • TitleView 에는 ActionBar
  • 가 포함 되 어 있 습 니 다.
    실현 과정,
    Created with Rapha ë l 2.1.0 Activity Activity Manager Service Activity Manager Service onCreate () 방법 에서 setContentView () 방법 을 호출 하여 DecorView 를 Phone Window 에 추가 하고 화면 리 셋 onResume () 방법 을 그립 니 다.
    뷰 의 측정
  • onMeasure () 방법 에서 측정
  • 안 드 로 이 드 시스템 은 우리 에 게 32 비트 int 값 (높 은 2 위 는 측정 위치, 낮은 30 위 는 측정 크기) 의 MeasureSpec 류 를 제공 하여 이 진 연산 을 이용 하여 계산 효율 을 높 였 다.

  • 측정 모드
  • EXACTLY (정확 한 모드): 구체 적 인 수치의 크기 나 matchparent (onMeasure () 방법 모드 는 이 모드 를 사용 하고 다른 모드 를 사용 하려 면 방법 을 다시 써 야 합 니 다).
  • AT_MOST (최대 치 모드): wrapcontent;
  • UNSPECIFIED (크기 측정 모드 는 지정 되 지 않 음): View 는 크기 를 원 하 는 만큼 사용 합 니 다. 사용자 정의 View 를 그 릴 때 만 사용 합 니 다.

  • 예 를 들다
    다시 쓰기 onMeasure ()
    @Override
    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec)
    {
        //super.onMeasure(widthMeasureSpec,heightMeasureSpec);
        //           measureWidth() measureHeight()
       setMeasuredDimension(measureWidth(widthMeasureSpec),measureHeight(heightMeasureSpec));
    }

    사용자 정의 방법 measureWidth () 를 예 로 들 면 measureHeight () 의 실현 과 차이 가 많 지 않 습 니 다. 여기에 쓰 지 않 겠 습 니 다.
    private int measureWidth(int measureSpec)
    {
        int result=0;
        //    : MeasureSpec              
        int specMode=MeasureSpec.getMode(measureSpec);
        int specSize=MeasureSpec.getSize(measureSpec);
        //     
        if(specMode==MeasureSpec.EXACTLY)
        {
            result=specSize;
        }
        else
        {
            result=200;// wrap_content     
            if(specMode==MeasureSpec.AT_MOST)
            {//     ,   
                result=Math.min(result,specSize);
            }
        }
        return result;
    }

    onMeasure () 방법 을 다시 쓰 는 목적 은 View 에 wrapcontent 속성 에서 기본 크기, 지정 한 wrapcontent 속성 을 사용 할 때 View 는 부모 레이아웃 을 채 우 는 것 이 아니 라 기본 값 200 px 를 얻 었 습 니 다.
    보기 의 그리 기
    View 를 측정 한 후, 간단하게 onDraw () 방법 으로 View 를 그 릴 수 있 습 니 다. 캔버스 류 Canvas 를 사용 해 야 합 니 다.View 를 그 리 는 데 는 두 가지 방법 이 있 습 니 다. - onDraw () 를 다시 쓰 는 방법, 매개 변수 Canvas canvas 대상 을 전달 하 는 방법, 이 를 사용 하여 그림 을 그립 니 다. -다른 곳 에 서 는 일반적으로 Canvas 대상 을 실례 적 으로 만들어 야 합 니 다. 코드 는 다음 과 같 습 니 다.
    Canvas canvas=new Canvas(bitmap);//          ,bitmap      

    ViewGroup 의 측정
    ViewGroup 은 하위 View 의 디 스 플레이 크기 를 관리 합 니 다.측정: ViewGroup 의 크기 는 wrapcontent (즉 AT MOST) 를 사용 할 때 ViewGroup 은 하위 View 를 옮 겨 다 니 며 모든 하위 View 의 크기 를 가 져 옵 니 다 (하위 View 의 Measure 방법 으로 측정 결 과 를 가 져 옵 니 다).다른 모드 에 서 는 구체 적 인 지정 값 을 통 해 크기 를 설정 합 니 다.Layout 프로 세 스: 측정 후 하위 View 를 적당 한 위치 에 두 어야 합 니 다.하위 View 의 Layout 방법 을 옮 겨 다 니 며 구체 적 으로 표 시 된 위 치 를 정 하여 레이아웃 위 치 를 구체 적 으로 결정 합 니 다 (onLayout () 를 다시 써 서 하위 View 의 디 스 플레이 위 치 를 제어 할 수 있 는 논리 입 니 다. wrap content 속성 을 지원 하려 면 onMeasure () 를 다시 써 야 합 니 다.
    ViewGroup 의 그리 기
    ViewGroup 은 보통 그리 지 않 아 도 됩 니 다.배경 색 을 지정 하면 onDraw 방법 이 호출 됩 니 다.ViewGroup 은 dispatchDraw 방법 (하위 View 를 호출 하 는 onDraw 방법) 을 통 해 하위 View 를 그 릴 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기