디바이스의 윈도우 크기보다 큰 사이즈의 동영상을 재생할때
videoview의 사이즈를 동영상크기로 맞출경우
윈도우의 크기만큼만 보이고 나머지 부분은 잘린채로 비율을 유지하고 싶습니다.
물론 밖으로 삐져나간 부분은 안보이겠지요
현재 문제는 view에 사이즈를 윈도우보다 오바해서 주게되면 view자체는 윈도우 밖으로 나가는것을 확인했습니다.
근데 동영상은 윈도우 사이즈에 맞춰 비율을 무시하고 풀 스크린으로 만들어 버리네요
늘어난 view의 비율을 유지한 상태로 잘린채로 감상하고 싶은데 말이죠.
당연히 세로로 늘어나버린 동영상을 감상할 수 밖에 없죠.
근데 이 현상이 디바이스마다 다르다는 것입니다.(어떤 폰에서는 정상적으로 view 크기대로 보이더군요)
디바이스마다 속성값이 다른것 같은데 어떻게 이 문제를 해결해야 할까요?
일단 제 코드입니다.
<manifest
<activity
android:name="PhoneActivity"
android:theme="@android:style/Theme.NoTitleBar."
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation|screenLayout"
android:windowSoftInputMode="adjustPan">
</activity>
// videwview를 상속받은 커스텀 뷰입니다.
public class CustomVideoView extends VideoView{
private int width, height;
public CustomVideoView(Context context) {
super(context);
width = 0;
height = 0;
}
public void setSize(int width, int height) {
this.width = width;
this.height = height;
}
@Override //동영상 크기 변환을 위한 코드
protected void onMeasure(int width, int height) {
super.setMeasuredDimension(this.width, this.height);
}
}
//xml파일
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:id="@+id/main_video_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</RelativeLayout>
</RelativeLayout>
//관련코드
private RelativeLayout mainVideoLayout;
private VideoView videoView;
mainVideoLayout = (RelativeLayout)findViewById(R.id.main_video_layout);
videoView = new CustomVideoView(this);
mainVideoLayout.addView(videoView);
//부모레이아웃 크기 변경(일단 풀스크린)
RelativeLayout.LayoutParams paramsMVL = (RelativeLayout.LayoutParams)mainVideoLayout.getLayoutParams();
paramsMVL.width = 480 * PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
paramsMVL.height = 800 * PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
mainVideoLayout.setLayoutParams(paramsMVL);
//동영상크기를 대강 비율에 맞춰서 설정
int width = 1200* PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
int heigh = 800* PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
((CustomVideoView) videoView).setSize(width, heigh);
//비디오 뷰 크기 변경(동영상 사이즈에 맞춤)
RelativeLayout.LayoutParams paramsVVL = (RelativeLayout.LayoutParams)videoView.getLayoutParams();
paramsVVL.width = 1200 * PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
paramsVVL.height = 800 * PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
paramsVVL.topMargin = 0 * PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
//이상태에서 음수 마진을 걸었을때 디바이스의 윈도우창 밖으로(왼쪽으로) 나가야 정상
paramsVVL.leftMargin = -350 * PhoneActivity.this.getResources().getDisplayMetrics().densityDpi / 160;
videoView.setLayoutParams(paramsVVL);
이렇게 했는데도 불구하고 영상이 디바이스 크기에 맞춰서 세로로 길게 늘어나서 보입니다. ㅠㅠ
이것때문에 몇일을 고생하고 있어요
서페이스로도 만들어보고 xml로 코딩도 해보고 했는데 특정 디바이스에서만 아돼더라구요
옵티머스 2x 2.3.4
갤럭시s 2.3.4
테스트 폰입니다.
정상적으로 동작하는 폰은
옵티머스LTE
디자이어
예뮬레이터(지인이 해봤는데 된다고 하네요)
뭔가 속성을 설정하는 부분이 있는것 같은데 찾을 수가 없네요
가령 getWindow().addFlags 속성이나 매니페스트 부분같은 부분에 말이죠
디바이스와 안드로이드버젼이 호환이 안되는걸까요?
도와주세요 ㅠㅠ
혹시 이 문제가 디바이스마다 틀린것을 보면
특정 디바이스에 동영상의 크기를 강제로 윈도우에 맞춰 축소시키는 것은 아닐까요???