안드로이드 개발 질문/답변
(글 수 45,052)
제목 그대로입니다.
Portrait 에서 Landscape
Landscape 에서 Portrait 로 갈때 아래 이미지처럼 영상이 이상한 사이즈가 되버려서 영상재생이 되긴 되는데
사이즈가 이상하죠.. 옆에 잔상들과..ㅠㅠ
더욱이 놀라운 사실은 이게 한번씩은 제대로 된다는거죠^-^;;
한번씩.
거의 저런상태처럼 된다고 보시면됩니다.
회전시에 Videoview의 OnMeasure 함수가 자동적으로 불려져서 화면의 사이즈가 결정됩니다.
이때 setMeasureDimension 함수를 이용해 사이즈를 조절합니다.
현재 레이아웃 은
<LinearLayout android:id="@+id/video_content_total_linear" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#5AD18F" android:orientation="vertical" android:weightSum="2" >
<LinearLayout android:id="@+id/video_videoview_linear" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#329632" android:gravity="center" android:orientation="vertical" >
<com.android.kyungnam.highschool.other.CustomVideoView android:id="@+id/videoView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerInParent="true" android:layout_gravity="center" /> </LinearLayout>
입니다.
커스텀한 VideoView 의 OnMeasure 은
@Override protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Display dis = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Log.i("@#@===MY===@#@", "dis.getRotation() =" + dis.getRotation()); Log.i("@#@===MY===@#@", "int widthMeasureSpec, int heightMeasureSpec = " + widthMeasureSpec + " , " + heightMeasureSpec);
// portrait if (dis.getRotation() == Surface.ROTATION_0 || dis.getRotation() == Surface.ROTATION_180) {
this.video_content_total_linear.setWeightSum(2); LayoutParams params = video_videoview_linear.getLayoutParams(); Log.i("@#@===MY===@#@", "params.height = " + params.height); Log.i("@#@===MY===@#@", "params.width =" + params.width); params.height = 0; params.width = android.widget.LinearLayout.LayoutParams.FILL_PARENT; this.video_videoview_linear.setLayoutParams(params); Log.i("@#@===MY===@#@", "dis.getWidth(); = " + dis.getWidth()); Log.i("@#@===MY===@#@", "dis.getHeight(); = " + dis.getHeight());
toLog("getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec) = " + getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec)); toLog("getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec) = " + getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); getHolder().setFixedSize(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); // super.onMeasure(widthMeasureSpec, heightMeasureSpec); }
// landscape else { toLog("video_videoview_linear.getHeight() = " + video_videoview_linear.getHeight()); toLog("video_videoview_linear.getWidth() = " + video_videoview_linear.getWidth()); toLog("getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec) = " + getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec)); toLog("getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec) = " + getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
dis = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); setMeasuredDimension(dis.getWidth(), dis.getHeight()); getHolder().setFixedSize(dis.getWidth(), dis.getHeight()); // this.draw(new Canvas()); }
이렇습니다.
여기가 관련된 Q/A인데.. 답변이 애석하게도 없습니다..
펍여러분들 도와주세요 ㅠㅠ