Android MediaController VideoView - всегда отображается при загрузке, хотя и не правильно на вкладке

У меня есть вкладка с различными вкладками, в том числе вкладка, отображающая список видео. На вкладке видео я использую videoview, чтобы отобразить видео и установить для него медиа-контроллер.

Результат:

введите описание изображения здесь

Но когда я иду к другому занятию, тогда возвращаюсь к старому занятию. Медиа-контроллер автоматически появляется, хотя я стою на вкладке текста, а не на вкладке видео

введите описание изображения здесь

Можете ли вы показать мне, как просто показать mediacontroller в tabvideo, перестать показывать в любом месте, как это?

Ну, я использую Recycleler для отображения списка видео, и это мой адаптер

@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 правильный?

Спасибо за ответ

2 ответа

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

}
VideoView videoHolder = new VideoView(contex);
    MediaController controller=new MediaController(this);
    videoHolder.setMediaController(controller);

    controller.setVisibility(View.GONE);

Выше код будет скрывать ваш MediaController.

Другие вопросы по тегам