2018-05-23 AppBarLayout与RecyclerView等CoordinatorLayou协用不流畅问题

1.替代AppBarLayout的behavior。

2.自定义的behavior要继承AppBarLayout.Behavior。

修改如下:

public class FlingBehaviorextends AppBarLayout.Behavior {

public FlingBehavior() {

}

public FlingBehavior(Context context, AttributeSet attrs) {

super(context, attrs);

  }

@Override

  public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY) {

//    LogUtils.logd("FlingBehavior", "onNestedFling  velocityY=" + velocityY);

      if (child.getTag(R.id.status_bar_top) !=null) {

int verticalOffset = (int) child.getTag(R.id.status_bar_top);

        if (child.getTotalScrollRange() - Math.abs(verticalOffset) >0) {

//          onTouchEvent(parent, child, ev);

            onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, false);

return true;

        }

}

return super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY);

  }

@Override

  public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {

//    LogUtils.logd("FlingBehavior", "onNestedFling  velocityY=" + velocityY);

      if (child.getTag(R.id.status_bar_top) !=null) {

int verticalOffset = (int) child.getTag(R.id.status_bar_top);

        if (targetinstanceof RecyclerView && velocityY <0) {

final RecyclerView recyclerView = (RecyclerView) target;

            if (recyclerView.getLayoutManager()instanceof LinearLayoutManager) {

LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();

              if (linearLayoutManager.findFirstCompletelyVisibleItemPosition() ==0) {

if (child.getTotalScrollRange() - Math.abs(verticalOffset) >0) {

consumed =false;

                  }

}

}

}

//      LogUtils.logd("FlingBehavior", "child.getTotalScrollRange()=" + child.getTotalScrollRange()

//          + "---Math.abs(verticalOffset)=" + Math.abs(verticalOffset) + "--consumed=" + consumed + "---velocityY=" + velocityY);

      }

return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);

  }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容