首页 > 解决方案 > Android MediaController VideoView - 加载时始终出现,尽管选项卡不正确

问题描述

我有一个带有不同选项卡的选项卡布局,包括显示视频列表的选项卡。在视频选项卡中,我使用 videoview 来显示视频并为其设置 mediacontroller。

结果:

在此处输入图像描述

但是当我去另一个活动时,然后回到旧的活动。即使我站在文本选项卡而不是视频选项卡上,媒体控制器也会自动弹出

在此处输入图像描述

你能告诉我如何在 tabvideo 中显示 mediacontroller,停止在任何地方显示吗?

嗯,我用recyclerview来显示视频列表,这是我的适配器

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    VideoModel item = VideoList.get(position);
    ((VHItem) holder).tvTittle.setText(item.getVideoTittle());
    ((VHItem) holder).tvTime.setText(item.getVideoTime());
    /***get clicked view and play video url at this position**/
    try {
        //play video using android api, when video view is clicked.
        String url = item.getVideoUrl(); // your URL here
        Uri videoUri = Uri.parse(url);
        ((VHItem) holder).videoView.setVideoURI(videoUri);
        //((VHItem) holder).videoView.seekTo(10);
        ((VHItem) holder).videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {

                mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

                        /*
                         * add media controller
                         */
                        MediaController mc = new MediaController(mContext);
                        mc.setMediaPlayer(((VHItem) holder).videoView);
                        ((VHItem) holder).videoView.setMediaController(mc);
                        /*
                         * and set its position on screen
                         */
                        mc.setAnchorView(((VHItem) holder).videoView);



                    }
                });

                ((VHItem) holder).videoView.seekTo(10);
            }
        });


    } catch (
            Exception e)

    {
        e.printStackTrace();
    }

}

我认为问题出在setOnPreparedListener正确的地方吗?

谢谢您的回答

标签: androidandroid-videoviewmediacontroller

解决方案


1.setAnchorView() 使用 VideoView 的父级覆盖媒体控件。如果您有固定高度的视频,请确保将其放在框架布局中,以便媒体控件位于视频顶部。
2.问题可能是你只setAnchorView()在你的内部使用。setOnVideoSizeChangedListener试试类似的东西:

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    VideoModel item = VideoList.get(position);
    ((VHItem) holder).tvTittle.setText(item.getVideoTittle());
    ((VHItem) holder).tvTime.setText(item.getVideoTime());
    /***get clicked view and play video url at this position**/
    try {
        //play video using android api, when video view is clicked.
        String url = item.getVideoUrl(); // your URL here
        Uri videoUri = Uri.parse(url);
        ((VHItem) holder).videoView.setVideoURI(videoUri);
        //((VHItem) holder).videoView.seekTo(10);
         if (mc == null) {//declare a private variable like "  private MediaController mc;" in the beginning of your adapter class
        mc = new MediaController(mContex);
         mc.setAnchorView(((VHItem) holder).videoView);
        ((VHItem) holder).videoView.setMediaController(mc);                                                                           
         }              
        ((VHItem) holder).videoView.setOnPreparedListener(new OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {


                mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {



                        mc.setAnchorView(((VHItem) holder).videoView);



                    }
                });

                ((VHItem) holder).videoView.seekTo(10);
            }
        });


    } catch (
            Exception e)

    {
        e.printStackTrace();
    }

}

推荐阅读