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.