2013년 5월 1일 수요일

VideoView 를 Rotate 할때 깨짐현상 해결법


비디오뷰가 있을때 Orientation을 Rotate 뷰의 크기를 전체화면으로 해야하는데 이때 비디오뷰가 깨지는 현상을 발견하였다. ( 아센기준 ) 
해결법공개

@Override
public void onConfigurationChanged(Configuration newConfig) {

// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
switch (newConfig.orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
toLog("ORIENTATION_LANDSCAPE");

if (videoview.isPlaying()) {
this.videoview.pause();
pause_flag = 1;
}
else {
pause_flag = 0;
}
toLog("pause_flag = " + pause_flag);

this.video_content_total_linear.setWeightSum((float) 1);
this.top_linear.setVisibility(View.GONE);
this.bottom_scroll.setVisibility(View.GONE);
this.top_txt.setVisibility(View.GONE);
this.bottom_linear.setVisibility(View.GONE);

LayoutParams params = video_videoview_linear.getLayoutParams();
Log.i("@#@===MY===@#@", "params.height = " + params.height);
Log.i("@#@===MY===@#@", "params.width =" + params.width);
params.height = android.widget.LinearLayout.LayoutParams.FILL_PARENT;
params.width = android.widget.LinearLayout.LayoutParams.FILL_PARENT;
this.video_videoview_linear.setLayoutParams(params);

toLog("Landscape layout GONE.");
toLog("videoview.getMeasuredHeight() = " + videoview.getMeasuredHeight());
toLog("videoview.getMeasuredWidth() = " + videoview.getMeasuredWidth());
toLog("this.width" + this.width);
toLog("this.height" + this.height);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
videoview.getHolder().setFixedSize(800, 480);
videoview.setMeasureDimensionDIS(800, 480);

if (pause_flag == 1) {
videoview.postInvalidate();
this.videoview.start();

}
// synchronized (videoview) {
// toLog("notifyAll");
// videoview.notifyAll();
// }
break;

case Configuration.ORIENTATION_PORTRAIT:
toLog("ORIENTATION_PORTRAIT");
if (videoview.isPlaying()) {
this.videoview.pause();
pause_flag = 1;
}
else {
pause_flag = 0;
}
toLog("pause_flag = " + pause_flag);

this.video_content_total_linear.setWeightSum(2);
LayoutParams params1 = video_videoview_linear.getLayoutParams();
params1.height = 0;
params1.width = android.widget.LinearLayout.LayoutParams.FILL_PARENT;
this.video_videoview_linear.setLayoutParams(params1);

this.top_linear.setVisibility(View.VISIBLE);
this.bottom_scroll.setVisibility(View.VISIBLE);
this.bottom_linear.setVisibility(View.VISIBLE);
this.top_txt.setVisibility(View.VISIBLE);

toLog("Portrait layout VISIBLE.");
toLog("videoview.getMeasuredHeight() = " + videoview.getMeasuredHeight());
toLog("videoview.getMeasuredWidth() = " + videoview.getMeasuredWidth());
toLog("this.width" + this.width);
toLog("this.height" + this.height);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
videoview.getHolder().setFixedSize(480, 330);
videoview.setMeasureDimensionMEASUR(480, 330);

if (pause_flag == 1) {

videoview.postInvalidate();
this.videoview.start();

}

break;

case Configuration.ORIENTATION_UNDEFINED:
toLog("ORIENTATION_UNDEFINED");
break;

default:
break;
}
}

flag 를 새로 집어넣는 것이 매우 중요!

댓글 없음:

댓글 쓰기