在列表视图中滚动时Android Media Controller卡在某个位置?

时间:2018-01-04 05:26:57

标签: android android-recyclerview android-videoview

我有一个使用Recycler View of android的卡片列表。我正在显示一些文字,并在其下面显示视频。

该列表滚动顺畅,播放视频流畅,直到我使用setMediaControll()启用控件。

当我向上/向下滚动列表时启用此视频媒体控件后,即使视频视图随列表视图滚动移动一起自由移动,控件也会保持在相同位置。

这些控件应随列表视图移动而保持静止。可能是什么导致了这个?这是预期的平台行为吗?

更新代码:

布局:

<FrameLayout
                    android:layout_centerHorizontal="true"
                    android:layout_centerInParent="true"
                    android:layout_gravity="center_horizontal"
                    android:id="@+id/frame_layout_video_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">

                    <VideoView
                        android:id="@+id/video_view"
                        android:layout_width="360sp"
                        android:layout_height="225sp"
                        android:layout_gravity="center" />

                    <ImageView
                        android:id="@+id/image_button_play"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical|center_horizontal"
                        android:contentDescription="play_pause_button"
                        app:srcCompat="@drawable/ic_play_circle_filled_white_24px" />

                    <ProgressBar
                        android:id="@+id/progressbar_video"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical|center_horizontal"
                        android:visibility="gone" />

                </FrameLayout>

在视图持有人中:

MyViewHolder(View itemLayoutView) {
            super(itemLayoutView);
..........
myVideoView = itemLayoutView.findViewById(R.id.video_view);
..........
}

开始视频播放的代码:

    ..........
    Uri uri = Uri.parse(url);
            holder.myVideoView.setVideoURI(uri);
            MediaController fsm = new MediaController(mContext,finalistFragment , url, holder.myVideoView);
            fsm.setAnchorView(holder.myVideoView);
            holder.myVideoView.setMediaController(fsm);
..........

对于列表,我使用RecyclerView

2 个答案:

答案 0 :(得分:0)

这确实是ListViewRecyclerView的已知行为,因为这些东西只会加载用户可见的视图,因为用户无法在滚动时到达控件,因此它们会冻结或者可能他们住在同一个地方

我的建议是覆盖setOnScrollListener的{​​{1}},但RecyclerView具体我不知道究竟是怎么回事。

我希望这会有所帮助

答案 1 :(得分:0)

这确实是与先生建议的RecyclerView行为相关的问题。 pouya 如果你在recyler适配器中设置了一个滚动器,那么如果这不起作用,那么在你的活动中的方法或同一个srcollistenr的片段中使用recyler视图方法,那么只需添加&amp;将videoView包装在cardview内的FrameLayout中,并参考以下链接以获取进一步说明

https://stackoverflow.com/a/24529711/9287163

注意:请向我们提供您的卡片视图布局XML文件和设置媒体控制器的代码。