android - 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
正确的地方吗?
谢谢您的回答
解决方案
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();
}
}
推荐阅读
- java - maven在输出中截断全局设置的完整路径
- python - 使用字典修改 dfs 值
- python - 正则表达式匹配 Python 语法中多个变量的变量赋值?
- python - 做groupby后如何访问pandas的最后一列?
- android - Android - 禁用从 ACTION_PICK_WIFI_NETWORK 屏幕向右滑动
- android - 发布的 expo 应用程序,在 iOS 上的 expo 中运行
- php - 如果条件为真,Laravel 急切加载返回
- excel - 在 FormulaR1C1 上设置变量
- c++ - 如何使用 common_type 和模板递归类型重载 operator+
- android - 徽章绘图未显示