안드로이드 개발 질문/답변
(글 수 45,052)
서피스뷰에 동영상을 출력하고 있는데,
레이아웃에서 서피스뷰의 크기를 전체 화면으로 하니까,
영상의 크기과 관계 없이 무조건 쭉 늘려서 출력하더군요(전체화면으로)
그래서 사용자가 전체화면(비율유지), 꽉찬화면, 비율 유지 이렇게 선택할 수 있게 만드려고 하는데,
미디어 플레이어든 다른 컴포넌트든 영상의 크기를 알아내는 메소드가 있으면 구현할 수 있을 것 같은데,
찾아봐도 잘 없네요.
도와주세요ㅠㅠ
2012.02.11 22:49:20
사이즈 조정은 그리 어려운 문제가 아니더군요.
320*240으로 출력한다고 치면,
android.view.ViewGroup.LayoutParams lp = mPreview.getLayoutParams();
lp.width = 320;
lp.height = 240;
mPreview.setLayoutParams(lp);
을 사용하니 문제없이 되었습니다.
문제는 비디오 크기(해상도)구하는 건데요...
mPlayer.getVideoWidth()은 Null이 되는 것 같습니다. 문자열로 변환 후 토스트로 출력하니, 0이 나옵니다.
흠... 어떻게 방법이 없을런지..




단순히 크기를 알아오는건 mPlayer.getVideoWidth() 랑 getVideoHeight() 쓰시면 되는건 이미 아실테구...
mPlayer.setOnVideoSizeChangedListener(); 쓰시면 비디오 로딩되었을때
@Override
public void onVideoSizeChanged()
로 화면 크기 넘어옵니다...
그리고 SurfaceView를 쓰셨으니
@Override
public void surfaceChanged()
로도 영상 크기가 넘어옵니다.
확실하게 하시려면,
class mySurfaceView extends SurfaceView {
int m_w, m_h;
// 생성자들 오버라이딩 해주세요.
// onVideoSizeChanged() 등에서 동영상 해상도 알았을 때 호출
public void setVideoSize(int w, int h)
{
m_w = w; m_h = h;
}
@Override
protected void onMeasure(int w, int h) {
int newW, newH;
// 이 안에서 m_w, m_h와 SurfaceView 영역을 계산해서
// 실제 화면에 표시할 newW, newH를 계산하세요.
// 동영상이 320*240이고, 화면이 800*480 이면
// 비율유지할때 newW = 640, newH = 480 이 되겠네요.
// 입력된 w랑 h는... 안쓰게 되던데, 이건 제가 허접해서 활용을 못하겠네요.
setMeasuredDimension(newW, newH);
}
}
이런식으로 만든신 후, SurfaceView 대신에 mySurfaceView 사용하세요.