2012-05-08 3 views
0

맞춤 동영상 플레이어를 만들려고합니다. VideoView를 사용하여 동영상을 표시하고 MediaController를 사용하여 비디오를 제어합니다.미디어 컨트롤러의 탭 표면을 변경하는 방법은 무엇입니까?

사용자가 화면을 탭하면 헤더와 미디어 컨트롤러가 3 초 동안 표시됩니다 (사용자가 계속 작업을 수행하는 경우에는 더 이상 표시됨). 그리고 사용자가 비디오를 다시 탭하면 두 요소가 숨겨져 야합니다.

화면의 첫 번째 탭에서 예상대로 머리글과 컨트롤러가 표시됩니다. 내 문제는 내가 화면에서 다시 탭하려고하면 그것은 컨트롤러를 숨기고 헤더가 사라지지 않는다는 것입니다. 내 질문은 어떻게 이것을 변경하는 것입니다 그래서 MediaController 자체 탭 표면을 정의하기 때문에 이것이라고 생각하십니까? MediaController를 코딩하지 않고 MediaController 객체의 탭 표면을 변경하는 방법은 무엇입니까?

private static final int ELAPSED_TIME = 2000; 
private boolean visible; 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // onTap 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Supprime le callback pour cacher les contrôles s'il y en avait un en cours 
     hideHandler.removeCallbacks(onElapsedTime); 

     // Affiche les contrôles s'il n'était pas déjà affichés 
     if (!visible) { 
      header.setVisibility(View.VISIBLE); 
      controller.show(0); // 0 -> Visible jusqu'à ce que hide() soit appelé 
      visible = true; 
     } 
     else { 
      header.setVisibility(View.GONE); 
      controller.hide(); 
      visible = false; 
     } 

     // Défini un runnable a exécuter après ELAPSED_TIME pour cacher le header et le contrôleur 
     hideHandler.postDelayed(onElapsedTime, ELAPSED_TIME); 
    } 

    return true; 
} 


private Runnable onElapsedTime = new Runnable() { 
    public void run() { 
     header.setVisibility(View.GONE); 
     controller.hide(); 
     visible = false; 
    } 
}; 
+0

[MediaController.java] 복사 (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/widget/MediaController.java# MediaController), & 동작을 좋아하지 않는 경우 & 수정할 수 없습니다. 보이는 컨트롤러는 아마도 모든 터치 이벤트를 소비하고 어떻게 든 터치 처리에 연결해야합니다. – zapl

+0

나는 당신이 말한 것을 시도하고 싶었지만 많은 의존성을 필요로하므로 좋은 생각이라고 생각하지 않습니다. Mediacontroller와 동시에 숨기고 보여줄 헤더를 추가하고 싶지만 분명 쉽지는 않습니다. – Fr4nz

+0

MediaController.java는 내부 API를 사용합니다. 따라서 모든 의존성 파일을 가져 오기위한 옵션조차도 아닙니다. PolicyManager.makeNewWindow (mContext)없이 MediaController의 "floating window"기능을 다시 만드는 방법을 찾아야합니다. – MaximumGoat

답변

1

먼저 클래스를 구성하고를 MediaController를 확장 :

내가 원하는 것과 내가하는 데 사용하는 코드입니다. 이제 "숨기기"및 "표시"방법을 재정의하고 원하는 작업을 수행하십시오. 그 간단한, 나는 똑같은 짓을 했어. hide 메소드에서 헤더의 가시성을 Gone 또는 Invisible로 설정할 수 있습니다 (requiremnets에 따라 다름).