本文实例为大家分享了Android仿抖音列表效果的具体代码,供大家参考,具体内容如下
当下抖音非常火热,是不是也很心动做一个类似的app吗?
那我们就用RecyclerView实现这个功能吧,关于内存的回收利用就交给RecyclerView就好了。
首先我们先说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);
}
@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;
}
}
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
this.mDrift = dy;
return super.scrollVerticallyBy(dy, recycler, state);
}
@Override
public int scrollHorizontallyBy(int dx, RecyclerView.Recycler recycler, RecyclerView.State state) {
this.mDrift = dx;
return super.scrollHorizontallyBy(dx, recycler, state);
}
public void setonViewPagerListener(onViewPagerListener listener) {
this.monViewPagerListener = listener;
}
private RecyclerView.onChildAttachStateChangeListener mChildAttachStateChangeListener = new RecyclerView.onChildAttachStateChangeListener() {
@Override
public void onChildViewAttachedToWindow(View view) {
if (monViewPagerListener != null && getChildCount() == 1) {
mOnViewPagerListener.onInitComplete(view);
}
}
@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();
}
}
github:Android仿抖音列表效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



