2012-02-03 3 views
0

나는 이미 두 번 만났던 일반적인 질문을 가지고 있습니다. Surfaceview 또는 GLsurfaceview를 사용하여 뷰를 만들면 다음과 같은 클래스가 생성됩니다 (OpenGL의 경우).안드로이드 디자인 - GLsurfaceview 렌더링 클래스가 새로운 활동을 시작합니다

렌더링 및 GLsurfaceview가 기본 활동 클래스입니다. GLsurfaceview 클래스 - 렌더링 클래스를 갖도록 설정됩니다. 렌더링 클래스 - 그리기를 렌더링합니다.

제 질문은 렌더링 클래스에서 발생한 이벤트가 있고 새 작업을 호출하려는 경우 어떻게해야합니까?

나는 주 활동 클래스를 렌더링 클래스로 전달하여 문제를 해결하고 MainActivity.Equels를 null로 호출하고 주 활동에서 일어날 일이 필요한 경우 거기에서 내가 필요한 것을 구현한다. 그보다 더 멋진 방법이 있습니까? 현명한 디자인일까요? 감사합니다. .

+0

나는 observer -approach를 택할 것이다. 관측자를 렌더러에 전달하고 MainActivity를 사용하는 것과 거의 같은 방식으로 렌더러를 사용할 수 있습니다. 그러나 현명하게 디자인하면 더 직관적이라고 느낍니다. – harism

답변

0

보기가 항상 활동에 있기 때문에 활동 내에서 설정할 수있는 관찰자 패턴 (일반적으로 자바 언어에서 "청취자"라고 함)을 사용하십시오 (button.setOnClickListener와 같은 다른보기에 사용 된 것과 동일한 접근법을 사용하십시오).

물론 뷰를 실행하는 스레드가 여러 개인 경우 처리기를 사용하여 이벤트를 전달해야 이벤트가 ui 스레드에서만 실행됩니다. 간단히 말해서, 해결책은 GLsurfaceview를 확장하고 그것에 대한 리스너 함수를 추가하는 것입니다.

관련 문제