2014-05-24 4 views
0

대화 상자에 VideoView를 표시하고 미디어 컨트롤을 연결하려고합니다.대화 상자의 Android 미디어 컨트롤러

하지만 미디어 컨트롤 (재생, 검색 바 등)을 탭하려고하면 대화 상자가 닫히는 문제가 발생합니다.

미디어 컨트롤 버튼이 탭되지 않고 탭이 다이얼로그의 외부 터치로 등록됩니다.

아무도 도와 줄 수 있습니까?

1) 흐린 배경으로 팝업에서 비디오를 표시합니다 : 내가 실제로 무엇을 달성하고자하는

은 다음과 같습니다. 2) VideoView 외부의 탭을 감지하고 "Cancel ??" 메시지를 사용자에게 보냅니다.

답변

0

내가 원하는 것을 얻기 위해 다른 방법을 찾았습니다.

나는 별도의 acivity에서 VideoView를 지켜 보면서 배치 및 매니페스트

으로 안드로이드에서 활동 테마를 설정 : 테마 = "@ 스타일/Theme.Transparent을"

을 다음과 같은 추가 다음 입술/값/styles.xml

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@color/transparent1</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">true</item> 
    </style> 

다음에 난 onTouchEvent 함수를 오버라이드 :

@Override 
    public boolean onTouchEvent(MotionEvent event) { 

     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 

      int[] l = new int[2]; 
      v.getLocationInWindow(l); 
      int x = l[0]; 
      int y = l[1]; 
      int w = v.getWidth(); 
      int h = v.getHeight(); 

      if ((int) event.getX() > x && (int) event.getX() < (x + w) 
        && (int) event.getY() > y && (int) event.getY() < (y + h)) { 
       // touch is inside the videoview 

      } else { 
       // touch is outside the videoview 
      } 

      break; 
     case MotionEvent.ACTION_MOVE: 

      break; 
     case MotionEvent.ACTION_UP: 

      break; 
     } 

     return false; 
    } 

여기서 "v"는 비디오 뷰입니다. 당신의 Dilalog Frgament이 VideoView를 지켜 보면서의 인스턴스를 만들에

1

이 같은 대화 레이아웃 모양,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <VideoView 
     android:id="@+id/videoview" 
     android:layout_width="640dp" 
     android:layout_height="400dp" 
     android:layout_centerInParent="true" > 
    </VideoView> 

     <FrameLayout 
      android:id="@+id/videoViewWrapper" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" > 
     </FrameLayout> 

    </RelativeLayout> 

,

mVideoView = (VideoView) view.findViewById(R.id.videoview); 

다음 세트 비디오 지역에서 URI 또는 ​​그 이후, 비디오 URL을 사용하여 재생, setOnPreparedListener 리스너를 사용하고 미디어 컨트롤러를 설정하십시오.

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

       @Override 
       public void onPrepared(MediaPlayer mp) { 
        // TODO Auto-generated method stub 
        mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
         @Override 
         public void onVideoSizeChanged(MediaPlayer mp, 
           int width, int height) { 
          /* 
          * add media controller 
          */ 
          mc = new MediaController(MainActivity.this); 
          mVideoView.setMediaController(mc); 
          /* 
          * and set its position on screen 
          */ 
          mc.setAnchorView(mVideoView); 

          ((ViewGroup) mc.getParent()).removeView(mc); 

          ((FrameLayout) findViewById(R.id.videoViewWrapper)) 
            .addView(mc); 
          mc.setVisibility(View.VISIBLE); 
         } 
        }); 
        mVideoView.start(); 
       } 
      }); 
관련 문제