처음부터 새로운 VideoView 를 작성하기는 어렵고 기본 VideoView 소스 코드를 참조하여 새로 작성하였다.
원본 소스 코드를 복사하여 필요한 부분만 수정하자.
적용하기
- MediaPlayer.OnErrorListerner 처리하는 부분을 살펴보면 internal 리소스를 사용하는 부분이 보인다.
- internal 리소스를 사용할 수는 없다.
- internal 을 사용하는 에러 다이얼로그를 띄우는 부분을 없애버렸다.
- if(getWindowToken() != null) { ... } 부분
- 다르게 수정하여도 된다.
화면에 꽉채우기
- mVideoHeight 와 mVideoWidth 가 사용되는 코드를 찾아보면 mp.getVideoWidth() 와 mp.getVideoHeight() 로 값을 적용하는 곳이 두군데 보인다.
- 그 대신에 mVideoHeight 와 mVideoWidth 를 ViewGroup.LayoutParams.FILL_PARENT 로 적용하면 화면에 꽉차게 출력한다.
Custom MediaController 작성하기
- MediaController 소스 코드: 링크
- 위치: [platform/frameworks/base.git]/core/java/android/widget/MediaController.java
- 참고(Building Custom Components) : http://developer.android.com/guide/topics/ui/custom-components.html
- 기존의 MediaController 대신 목적에 맞게 작성한 뷰를 이식시켰다.
- MediaController 에서 소스를 복사해 오는 거 보다는 참조하면서 필요한 부분은 복사해 왔다.
- VideoView 에서 호출하는 함수들을 구현해 주었다. 필요에 따라 구현한다.
- show() - 컨트롤러를 보여준다.
- hide() - 컨트롤러를 감춘다.
- setMediaPlayer() - MediaPlayerControl 를 상속한 객체를 받는다.
- setAnchorView() - MediaController 가 붙어 있을 View 객체
- setEnabled() - 활성화/비활성화 설정
- MediaController 소스 코드를 보면 show 부분에 WindowManager 는 사용할 수 없다.
- 대신 setVisibility 함수를 활용 했다.
- 그 외 비슷하게 구현하면 된다.
- 주의) Controller 가 다른 여러 View 를 갖고 있다면 onFinishInflate() 에서 초기화 해주어야 한다.
대부분 기억에 의존해 글을 작성하였다.
댓글 없음:
댓글 쓰기