Android媒体控制器在一个对话框中

时间:2014-05-24 10:14:40

标签: android dialog android-videoview mediacontroller

我正在对话框中显示VideoView,并且我正在附加媒体控件。

但是当我尝试点击媒体控件(播放,搜索栏等)时,对话框就会被取消。

媒体控制按钮不会被点击,而是将点击注册为对话的OutsideTouch。

任何人都可以帮我吗?

我真正希望实现的目标如下:

1)在背景模糊的弹出窗口中显示视频。 2)检测VideoView外的任何水龙头并弹出一个"取消??"消息给用户。

2 个答案:

答案 0 :(得分:2)

对话框布局如下所示,

<?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();
                }
            });

答案 1 :(得分:1)

我找到了一种实现我想要的不同方式。

我将视频视图放在一个单独的活动中,并将清单中活动的主题设置为

  

机器人:主题=&#34; @风格/ Theme.Transparent&#34;

并在res / values / 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;
    }

其中&#34; v&#34;是视频观看。