这期内容当中小编将会给大家带来有关怎么在Android中实现一个抖音列表效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
3个和视频播放暂停相关的接口
public interface OnViewPagerListener {
/**
* 初始化
*/
void onInitComplete(View view);
/**
* 释放
*/
void onPageRelease(boolean isNext, int position, View view);
/**
* 选中
*/
void onPageSelected(int position, boolean isBottom, View view);
}
然后自定义LinearLayoutManager
public class PagerLayoutManager extends LinearLayoutManager {
private PagerSnapHelper mPagerSnapHelper;
private OnViewPagerListener mOnViewPagerListener;
private RecyclerView mRecyclerView;
private int mDrift;//位移,用来判断移动方向
public PagerLayoutManager(Context context, int orientation) {
super(context, orientation, false);
init();
}
public PagerLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
init();
}
private void init() {
mPagerSnapHelper = new PagerSnapHelper();
}
@Override
public void onAttachedToWindow(RecyclerView view) {
super.onAttachedToWindow(view);
mPagerSnapHelper.attachToRecyclerView(view);
this.mRecyclerView = view;
mRecyclerView.addOnChildAttachStateChangeListener(mChildAttachStateChangeListener);
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
super.onLayoutChildren(recycler, state);
}
/**
* 滑动状态的改变
* 缓慢拖拽-> SCROLL_STATE_DRAGGING
* 快速滚动-> SCROLL_STATE_SETTLING
* 空闲状态-> SCROLL_STATE_IDLE
*
* @param state
*/
@Override
public void onScrollStateChanged(int state) {
switch (state) {
case RecyclerView.SCROLL_STATE_IDLE:
View viewIdle = mPagerSnapHelper.findSnapView(this);
if (viewIdle != null) {
int positionIdle = getPosition(viewIdle);
if (mOnViewPagerListener != null && getChildCount() == 1) {
mOnViewPagerListener.onPageSelected(positionIdle, positionIdle == getItemCount() - 1, viewIdle);
}
}
break;
case RecyclerView.SCROLL_STATE_DRAGGING:
View viewDrag = mPagerSnapHelper.findSnapView(this);
if (viewDrag != null) {
int positionDrag = getPosition(viewDrag);
}
break;
case RecyclerView.SCROLL_STATE_SETTLING:
View viewSettling = mPagerSnapHelper.findSnapView(this);
if (viewSettling != null) {
int positionSettling = getPosition(viewSettling);
}
break;
}
}
/**
* 监听竖直方向的相对偏移量
*
* @param dy
* @param recycler
* @param state
* @return
*/
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
this.mDrift = dy;
return super.scrollVerticallyBy(dy, recycler, state);
}
/**
* 监听水平方向的相对偏移量
*
* @param dx
* @param recycler
* @param state
* @return
*/
@Override
public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
this.mDrift = dx;
return super.scrollHorizontallyBy(dx, recycler, state);
}
/**
* 设置监听
*
* @param listener
*/
public void setOnViewPagerListener(OnViewPagerListener listener) {
this.mOnViewPagerListener = listener;
}
private RecyclerView.OnChildAttachStateChangeListener mChildAttachStateChangeListener = new RecyclerView.OnChildAttachStateChangeListener() {
/**
* itemView依赖Window
*/
@Override
public void onChildViewAttachedToWindow(View view) {
if (mOnViewPagerListener != null && getChildCount() == 1) {
mOnViewPagerListener.onInitComplete(view);
}
}
/**
*itemView脱离Window
*/
@Override
public void onChildViewDetachedFromWindow(View view) {
if (mDrift >= 0) {
if (mOnViewPagerListener != null)
mOnViewPagerListener.onPageRelease(true, getPosition(view), view);
} else {
if (mOnViewPagerListener != null)
mOnViewPagerListener.onPageRelease(false, getPosition(view), view);
}
}
};
}
然后大功告成直接使用
recyclerView = findViewById(R.id.recycler_view);
PagerLayoutManager mLayoutManager = new PagerLayoutManager(this, OrientationHelper.VERTICAL);
mDatas.addAll(DataUtils.getDatas());
mAdapter = new VideoAdapter(this, mDatas);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setAdapter(mAdapter);
mLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {
@Override
public void onInitComplete(View view) {
playVideo(0, view);
}
@Override
public void onPageSelected(int position, boolean isBottom, View view) {
playVideo(position, view);
}
@Override
public void onPageRelease(boolean isNext, int position, View view) {
int index = 0;
if (isNext) {
index = 0;
} else {
index = 1;
}
releaseVideo(view);
}
});
/**
* 播放视频
*/
private void playVideo(int position, View view) {
if (view != null) {
mVideoView = view.findViewById(R.id.video_view);
mVideoView.start();
}
}
/**
* 停止播放
*/
private void releaseVideo(View view) {
if (view != null) {
IjkVideoView videoView = view.findViewById(R.id.video_view);
videoView.stopPlayback();
}
}
上述就是小编为大家分享的怎么在Android中实现一个抖音列表效果了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。