android 隐藏浮动按钮,Android 浮动按钮+上滑隐藏按钮+下滑显示按钮

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值