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