제목 그대로입니다. 


Portrait 에서 Landscape 

Landscape 에서 Portrait 로 갈때 아래 이미지처럼 영상이 이상한 사이즈가 되버려서 영상재생이 되긴 되는데

video started ok in portrait

on landscape the video works fine too

but now going back to portrait always shows corruption

사이즈가 이상하죠.. 옆에 잔상들과..ㅠㅠ


더욱이 놀라운 사실은 이게 한번씩은 제대로 된다는거죠^-^;;


한번씩.


거의 저런상태처럼 된다고 보시면됩니다.


회전시에 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());
  }

이렇습니다. 


http://stackoverflow.com/questions/6524659/avoid-android-videoview-corruption-when-rotating-back-to-portrait?rq=1


여기가 관련된 Q/A인데.. 답변이 애석하게도 없습니다..


펍여러분들 도와주세요 ㅠㅠ