2013-10-13 1 views
3

Android View 클래스에는 onDraw이라는 메서드가 있으며 onDraw에는 캔버스가 전달됩니다. 사용자 만 전달 된 캔버스를 명시 적으로 생성하지 않으며 액세스 할 수있는 다른 방법이없는 것처럼 보입니다.Android View 클래스의 onDraw 메소드가 어떤 캔버스를 전달합니까?

onDraw으로 전달되는 캔버스는 어디에서 생성되며 액세스 할 수있는 방법은 무엇입니까?

도움 주셔서 감사합니다.

+0

보기에 중단 점을 설정하기 만하면됩니다. . 아래의 프레임을 스캔하고 스캔하십시오. 그 중 하나는 ViewRoot 여야합니다. – pskink

+0

'Canvas' 오브젝트는 드로잉 표면에 잠금 장치가있는 원시 2D 라이브러리 함수를 감싸는 래퍼 일뿐입니다. 해당 드로잉 표면에 액세스하려는 경우 비공개 API에 액세스하지 않고는 액세스 할 수 없으며 어쨌든 그렇게하는 것은 현명하지 않을 수 있습니다. 'onDraw' 밖에서 정확히 무엇을하려하고 있습니까? 우리가 당신의 의도를 알고 있다면, 그것을 성취하는 방법을 더 잘 제시 할 수있을 것입니다. – Dave

답변

0

으로는 전망이 암시 적으로 그와 관련된 캔버스를 가지고 Understanding Canvas and Surface concepts

에서 결론을 내렸다. 특정보기 내에서 또는 특정보기 (즉,보기 v와 v.invalidate())에서 invalidate()가 호출되면 해당보기와 연관된 캔버스가보기의 onDraw 메소드로 전송됩니다.

보기에 다른보기가 포함되어 있으면 계층보기 트리가 무효화 된보기에서 시작하여 다시 탐색되고 다시 그려집니다.

0

ViewRootImpl (보기 계층의 최상위 클래스)은 표시 창 전체에 대해 Canvas을 요청하고 의 최상위 레벨 ViewGroup에 전달합니다. 각 ViewGroupCanvas의 서브 세트 된이 연결된 을 각 자식 Viewdraw() 메소드에 전달합니다.

내가 아는 한, (및 관련 방법) 외부의 Canvas을 조작 할 수 없습니다.

사용자가 제어하는 ​​Canvas의 새 인스턴스를 사용하여 draw()에 직접 전화 해보십시오. 화면에 아무 것도 그리지 않지만 클래스의 다른 곳에서 Canvas을 읽고 비트 맵으로 변환 할 수 있습니다. 예를 들어 다음 답변을 참조하십시오. Convert view to bitmap on Android

관련 문제