2012-12-19 10 views
2

처음에는 onDraw() 메서드를 재정 의하여 그려진 사용자 지정보기를 만들었습니다. 이것은 필자가 만들어야 할 많은 양의 관점 때문에 비실용적 인 것으로 판명되었습니다. 그래서 저는 각각 onLayout() 메쏘드를 가진 그것의 childs들을 드로잉하는 커스텀 ViewGroup을 만들었습니다.사용자 정의 ViewGroup 내의 사용자 정의보기는 onDraw() 또는 layout()을 사용해야합니까?

나는 자식보기가 layout() 메소드를 구현해야한다는 안드로이드 문서를 읽었습니다. 하지만 내가 만든 자식 뷰는 onDraw 메서드를 사용하여 그 자체를 그립니다. 어떻게해야합니까? onDraw() 방법을 제거해야합니까? 그리고 아무도 나에게 layout() 방법이 어떻게 작동하는지 예를 들려주고 어떻게 onDraw() 메서드를 layout() 메서드로 '변환'해야합니까?

내 현재 onDraw() 방법은 다음과 같습니다

protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 

     //Draw Border. 
     canvas.drawRect(mCellBounds, mBorderPaint); 

     //Draw Background. 
     canvas.drawRect(mBackgroundBounds, mBackGroundPaint); 

     //Draw Value if not 0. 
     if(Value != 0) 
      canvas.drawText(Integer.toString(Value), ValueX, ValueY, mNumberPaint); 

     //Draw Notes if Value == 0. 
     else 
     { 
      for(int i = 0 ; i < 9 ; i++) 
       if(NoteList[i]) 
        canvas.drawText(Integer.toString(i), NoteX + ((i%3) * NoteMeasureX), NoteY + ((i/3) * NoteMeasureY), mNotePaint); 
     } 
    } 

답변

5

그래서 각각의 자식을 onLayout() 메서드로 그려주는 사용자 지정 ViewGroup을 만들었습니다.

방법으로 ViewGroup 님의 자녀를 어떻게 그리는 지 알 수 없습니다. 이 방법은 아이들을 화면에 배치하는 데 사용해야합니다.

내가 아이 뷰가 레이아웃() 메소드 방법은 이미 구현되어 있는지

를 구현해야하는 안드로이드 문서에서 읽은 View 알 수 있도록, 당신은 바로 값으로 호출 어디에서 화면에 배치해야합니다.

onDraw() 메소드를 제거해야합니까? 당신이 실제로 무언가를보고 싶다면

당신은 onDraw 방법을 무시해서는 안된다.

그리고 사람이 나에게 레이아웃() 메소드가 를 작동하는 방법의 예를 줄 수 내가 레이아웃() 메소드 내의 onDraw() 메소드를 '변환'하는 방법?

당신은 layout 방법에 onDraw 방법을 변환하지 않습니다. 예를 들어, 사용자 지정 자식 과 사용자 지정 자식 View으로 구성된 작은 샘플을 만들었습니다.

custom ViewGroup

당신은 샘플 here을 찾을 수는 아래 그림과 같이 두 (예상 아이들)를 배치합니다 사용자 정의 ViewGroup (각 어린이는 절반 너비와 부모의 높이가됩니다). 나는 그것이 당신을 돕기를 바랍니다. SDK 레이아웃의 소스 코드 (예 : FrameLayout)를보고 자신의 마술 방식을 확인할 수도 있습니다.

1

당신은 정말 전체 뷰 계층 구조가 필요하십니까? SurfaceView을 사용하는 것을 고려해보십시오. 사용자 지정 그리기를 수행하는 데 훨씬 가벼운 방법이며 모든보기에서 다른보기에 쉽게 포함시킬 수 있습니다.

내 대답 here도 참조하십시오.

+0

감사합니다. 이것을 고려해 보겠습니다. 그러나 지금은 맞춤보기 그룹이 어떻게 작동하는지 이해하여이 질문이 중요하다는 것을 알고 싶습니다. –