如果视图包含视频,我需要在列表视图/滚动视图中自动播放视频。这与Facebook非常相似。如果用户向下/向上滚动并且可见区域包含系统将播放视频的视频,并且如果仍然滚动则会自动停止该视频。它应该像, 假设从顶部开始的第一个可见项目可见性是< 50%然后第一个可见的项目应该发挥其他明智的第二个可见项应该发挥。 谢谢!
我正在使用以下代码:
private ListView listView = null;
View getArticleListView()
{
listView = new ListView(context);
listView.setAdapter(new ListAdaptor(context, titleList, descriptionList, pubDateList, thumbnailList, contentList, pageNumber));
listView.setRecyclerListener(new AbsListView.RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
View firstView = listView.getChildAt(0);
if (ListAdaptor.videoPlayer != null)
ListAdaptor.videoPlayer.stopPlayback();
}
});
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
private int mFirstVisibleRow = 0;
private int mActiveItem = 0;
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
int firstVisibleRow = listView.getFirstVisiblePosition();
if( mFirstVisibleRow != firstVisibleRow )
{
mFirstVisibleRow = firstVisibleRow;
VideoView prevActiveVideoView = getVideoViewForRow(mActiveItem); // Cancel the video of the previous active item
if( prevActiveVideoView != null )
{
prevActiveVideoView.setVisibility(View.INVISIBLE);
ListAdaptor.imgCardLitImage.setVisibility(View.VISIBLE);
ListAdaptor.imageVideoOverLay.setVisibility(View.VISIBLE);
prevActiveVideoView.pause();
}
// Start the video of the new active item
if(viewHeight > (listView.getChildAt(0).getHeight())/2 ){
mActiveItem = mFirstVisibleRow + 1;
}
else {
mActiveItem = mFirstVisibleRow;
}
final VideoView newActiveVideoView = getVideoViewForRow(mActiveItem);
if(newActiveVideoView != null)
{
newActiveVideoView.setVisibility(View.VISIBLE);
newActiveVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
mediaPlayer.setVolume(0, 0);
}
});
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
View v = listView.getChildAt(0);
int top = (v == null) ? 0 : (listView.getPaddingTop() - v.getTop());
viewHeight = top;
}
private VideoView getVideoViewForRow(int row)
{
int firstVisibleRow = listView.getFirstVisiblePosition();
View rowView = listView.getChildAt(row-firstVisibleRow);
return (rowView == null) ? null : (VideoView)rowView.findViewById(R.id.videoView);
}
});
return listView;
}
在视图中的ListAdaptor类中我只是使用
public View getView(int position, View convertView, ViewGroup parent) {
View view;
.
.
.
Uri uri = Uri.parse(contentList.get(position));
videoPlayer.setVideoURI(uri);
return view;
}