3.1.源代码如下。

// FAB 行为控制器

public class ScaleDownShowBehavior extends FloatingActionButton.Behavior {

public ScaleDownShowBehavior(Context context, AttributeSet attrs) {

super();

}

@Override

public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,

FloatingActionButton child, View directTargetChild,

View target, int nestedScrollAxes) {

if (nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL){

return true;

}

return super.onStartNestedScroll(coordinatorLayout, child, directTargetChild,

target, nestedScrollAxes);

}

private boolean isAnimateIng = false; // 是否正在动画

private boolean isShow = true; // 是否已经显示

public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,

View target, int dxConsumed, int dyConsumed,

int dxUnconsumed, int dyUnconsumed) {

if ((dyConsumed > 0 || dyUnconsumed > 0) && !isAnimateIng && isShow) {// 手指上滑,隐藏FAB

AnimatorUtil.translateHide(child, new StateListener() {

@Override

public void onAnimationStart(View view) {

super.onAnimationStart(view);

isShow = false;

}

});

} else if ((dyConsumed < 0 || dyUnconsumed < 0 && !isAnimateIng && !isShow)) {

AnimatorUtil.translateShow(child, new StateListener() {

@Override

public void onAnimationStart(View view) {

super.onAnimationStart(view);

isShow = true;

}

});// 手指下滑,显示FAB

}

}

class StateListener implements ViewPropertyAnimatorListener {

@Override

public void onAnimationStart(View view) {

isAnimateIng = true;

}

@Override

public void onAnimationEnd(View view) {

isAnimateIng = false;

}

@Override

public void onAnimationCancel(View view) {

isAnimateIng = false;

}

}

}

3.2.构造函数。

850e11e7682131a4f8f4a3ece0bfe98d.png

这里继承了浮动按钮的行为FloatingActionButton.Behavior,构造函数直接继承基类即可。

3.3.这里重写第一个函数onStartNestedScroll

296af5f6ff5211a13a38ab933d72a9e7.png

这里还是主要继承原来的即可。

3.4.定义两个变量

842518edad900dc8afc3a7e54b594ae4.png

3.5.监听手指上滑和手指下滑

24271209379dcf4c0ac8e2d9a47795f5.png

手指上滑是通过dyConsumed>0判断的,执行AnimatorUtil隐藏函数即可。

手指下滑是通过dyConsumed<0判断的,执行AnimatorUtil显示函数即可。

3.6.AnimatorUtil自定义类函数需要传入一个监听器

b937a7740695fde25299daf0731be461.png

如果动画开始,则设置是否正在动画为true

如果动画结束,则设置是否正在动画为false

如果动画取消,则设置是否正在动画为false

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐