android 自动向上滑动效果,Android 仿抖音上下滑动布局

抖音上下滑动,监听播放,自动吸顶,吸底效果

使用RecyclerView+PagerSnapHelper实现

public class DouYinLayoutManager extends LinearLayoutManager implements RecyclerView.OnChildAttachStateChangeListener{

//判断是否上滑还是下滑

private int mDrift;

private OnViewPagerListener onViewPagerListener;

//吸顶,吸底

private PagerSnapHelper pagerSnapHelper;

public OnViewPagerListener getOnViewPagerListener() {

return onViewPagerListener;

}

public void setOnViewPagerListener(OnViewPagerListener onViewPagerListener) {

this.onViewPagerListener = onViewPagerListener;

}

public DouYinLayoutManager(Context context) {

super(context);

}

public DouYinLayoutManager(Context context, int orientation, boolean reverseLayout) {

super(context, orientation, reverseLayout);

pagerSnapHelper = new PagerSnapHelper();

}

/**

* 当manager完全添加到recycleview中是会被调用

* @param view

*/

@Override

public void onAttachedToWindow(RecyclerView view) {

view.addOnChildAttachStateChangeListener(this);

pagerSnapHelper.attachToRecyclerView(view);

super.onAttachedToWindow(view);

}

@Override

public boolean canScrollVertically() {

return super.canScrollVertically();

}

@Override

public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {

mDrift = dy;

return super.scrollVerticallyBy(dy, recycler, state);

}

@Override

public void onChildViewAttachedToWindow(@NonNull View view) {

if (mDrift > 0){

//向上滑

if (onViewPagerListener != null && Math.abs(mDrift) == view.getHeight()){

onViewPagerListener.onPageSelected(false,view);

}

}else {

//向下滑

if (onViewPagerListener != null && Math.abs(mDrift) == view.getHeight()){

onViewPagerListener.onPageSelected(true,view);

}

}

}

@Override

public void onChildViewDetachedFromWindow(@NonNull View view) {

if (mDrift >= 0){

//向上滑

if (onViewPagerListener != null){

onViewPagerListener.onPageRelease(true,view);

}

}else {

//向下滑

if (onViewPagerListener != null){

onViewPagerListener.onPageRelease(false,view);

}

}

}

@Override

public void onScrollStateChanged(int state) {

switch (state){

case RecyclerView.SCROLL_STATE_IDLE:

//当前显示的item

View snapView = pagerSnapHelper.findSnapView(this);

if (onViewPagerListener != null){

onViewPagerListener.onPageSelected(false,snapView);

}

break;

}

super.onScrollStateChanged(state);

}

}

recyclerView.setLayoutManager()即可

recyclerView = findViewById(R.id.recyclerView_dy);

douYinLayoutManager = new DouYinLayoutManager(this, OrientationHelper.VERTICAL,false);

recyclerView.setLayoutManager(douYinLayoutManager);

recyclerView.setAdapter(new MyAdapter());

douYinLayoutManager.setOnViewPagerListener(new OnViewPagerListener() {

@Override

public void onPageRelease(boolean isNest, View position) {

releaseVideo(position);

}

@Override

public void onPageSelected(boolean isButten, View position) {

playVideo(position);

}

});

}

代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值