2017-04-16 5 views
1

일부 드로잉 작업을 수행하기 위해 표면 뷰를 사용했습니다. 내보기는 확대/축소 기능을 지원합니다. 이제 사용자가 손가락 제스처로 확대/축소 할 때 표면 뷰의 크기를 조정하려는 경우 표면 뷰의 레이아웃 매개 변수를 변경하여 크기 조정을 시도했습니다. 이 작업은 가능하지만 느리고 크기 조정 작업을 수행하는 동안 큰 점프 (지연)가 발생합니다. 이는 쓸모가 없습니다. 여기, 나는 그 점프없이 표면 뷰의 크기를 어떻게 효율적으로 조절할 수 있는지 알고 싶습니다. 내보기 구조 스닙 여기런타임에보기 크기를 효율적으로 변경합니다.

, 코드를 변경

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:fillViewport="true" 
    android:layout_above="@+id/bottomMenu" 
    android:layout_height="match_parent"> 

    <MySurfaceView 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</FrameLayout> ... 

그리고 PARAMS, 내가 고정 캔버스 크기를 설정하는 SurfaceHolder에하는 방법을 발견 결국 잘

ViewGroup.LayoutParams params = surface.getLayoutParams(); 
params.height = (int) (750*factor); 
surface.setLayoutParams(params); 
+0

['TextureView'] (https://developer.android.com/reference/android/view/TextureView.html) 사용을 고려 했습니까? – azizbekian

+0

참조 http://stackoverflow.com/a/21282056/4069985 –

답변

0

,

holder.setFixedSize(canvasW, canvasH); 

이 방법을 사용하면 지연 매개 변수없이 레이아웃 매개 변수를 사용하여 레이아웃의 크기를 조정할 수 있습니다. . 여기서 캔버스 크기를 설정하기 전에 캔버스 크기를 알아야하므로 미리 정의 된 크기의 Java 코드에서 SurfaceView를 추가 했으므로 원활하게 작동합니다.

** 아직 확신 할 수없는 이유는 왜 캔버스 고정 크기가 트릭을 완성했는지입니다. 당신은 조금 설명해 주실 수 있습니다 (이 답변을 편집 할 수도 있음).

+0

어떻게 처리 했습니까? Layout Lag를 변경하면서 SurfaceView의 크기를 재조정 할 때도 같은 문제가 발생합니다. – vovan888

+0

surfaceHolder를 초기화 할 때 위의 메서드로 고정 된 크기로 설정합니다. – asish