2014-12-17 2 views
0

나는 내가 만든 가지고서피스 뷰 SurfaceView 높이와 폭

SurfaceView 

수업을하고 높이와 서피스 뷰 SurfaceView의 생성자에서 표면의 폭을 얻는 방법을 궁금해하고있다. (픽셀 단위의 높이와 너비)

나는 이것이 매우 쉽다고 믿는다. 그러나 이것은 매우 어렵다.

Google은 높이와 너비 속성을 사용하여 낙담하는 것을 알고 있지만 필요하다고 생각합니다.

도움이 되셨다면 감사합니다.

+0

SurfaceView의 크기를 결정할 수 있다면 커스텀 생성자에서이를 전달할 수 있지만 SurfaceView를 동적으로 생성해야합니다. 즉, 레이아웃 xml에 없습니다. 그렇지 않으면 뷰는 레이아웃 될 때까지 크기를 알지 못합니다. –

답변

2

서피스 뷰 SurfaceView 꽤 그런 식으로 작동하지 않습니다.

SurfaceView는 서피스와 뷰의 두 부분으로되어 있습니다. 뷰는 뷰 계층에 의해 생성되며 일반적인 레이아웃 메카니즘의 적용을받습니다.

표면은 창 관리자에 의해 생성됩니다. 그래픽 컴 포지 터 (SurfaceFlinger)에 IPC가 필요합니다. 지연 가능성 때문에 SurfaceView 인스턴스 생성에는 비동기 구성 요소가 있으며 SurfaceView는 생성자가 종료 될 때까지 일반적으로 존재하지 않습니다.

이 문제를 해결하는 올바른 방법은 SurfaceHolder 콜백을 설정하고 surfaceChanged() 메서드가 호출 될 때까지 기다리는 것입니다. 콜백은 표면 너비와 높이를 인수로받습니다.

Grafika에서 몇 가지 예를 볼 수 있습니다. "hardware scaler exerciser"활동은 폭과 높이의 변화를 추적합니다.

1

는 다음과 같이하십시오 :

getWindowManager().getDefaultDisplay().getMetrics(metrics); Width = metrics.widthPixels; Height = metrics.heightPixels;

+0

이것이 SurfaceView의 생성자에 들어 있습니까? – 26hmkk

+0

그러면 디스플레이 크기가 표시됩니다. 화면 장식 (상태 및 탐색 막대)으로 인해 표면 크기가 다를 수 있습니다. – fadden