안드로이드 개발 질문/답변
(글 수 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인데.. 답변이 애석하게도 없습니다..
펍여러분들 도와주세요 ㅠㅠ



