当前位置: 移动技术网 > IT编程>移动开发>Android > Android仿抖音上下滑动布局

Android仿抖音上下滑动布局

2020年03月09日  | 移动技术网IT编程  | 我要评论

dzhsj,黑客红客,工程复印机

抖音上下滑动,监听播放,自动吸顶,吸底效果,供大家参考,具体内容如下

使用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);
      }
    });
  }

代码:myuidemo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网