2014-05-24 52 views
0

我在對話框中顯示VideoView,並且附加了媒體控件。對話框中的Android媒體控制器

但是當我嘗試點擊媒體控件(播放,搜索欄等)時,對話框被取消。

媒體控制按鈕不會被輕敲,而是將輕敲寄存器作爲外接觸到對話框。

任何人都可以幫助我嗎?

什麼其實我是想實現如下:

1)顯示在彈出的視頻背景模糊的圖像。 2)檢測VideoView外的任何水龍頭,並彈出「取消??」消息給用戶。

回答

0

我發現了一種不同的方式來實現我想要的。

我置於videoview在一個單獨的活性,並設置爲主題中表現爲

機器人活性:主題=「@風格/ Theme.Transparent」

和增加了以下在res /值/ 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> 

下一I overrided所述的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」是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> 

在Dilalog Frgament使videoview的情況下,

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

下一組視頻從本地或URI播放使用視頻網址,在那之後,使用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(); 
       } 
      });