android 上拉隐藏布局,RecyclerView实现上滑动隐藏搜索布局下滑显示搜索布局

实现的效果图:

首先需要对RecyclerView滑动监听

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override

public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {

super.onScrolled(recyclerView, dx, dy);

Util.closeKeyboard(ProductListActivity.this);

totalDy += dy;

if (dy>5){

viewVisibilityOrGone.setCurrentMove(true);

}

if (dy

上下滑动列表隐藏布局动画的实现

import android.animation.ValueAnimator;

import android.view.View;

import android.view.ViewGroup;

public class ViewVisibilityOrGone {

/**

* 执行动画对象

*/

private ValueAnimator animator ;

/**

* 操作的目标view

*/

private View view;

private int viewHeight;

/**

* 移动的方向 支持上下移动 true 向上滑动 false 向下滑动

*/

private boolean isCurrentMove;

/**

* 记录是否已经执行过上滑动

*/

private boolean isUp;

/**

* 记录是否已经执行过下滑动

*/

private boolean isDown;

/**

* 动画执行的时间

*

*/

private int animTime = 300 ;

/**

* @param view

*/

public ViewVisibilityOrGone(View view){

this.view = view ;

if (view!=null){

//重新测量

view.measure(0,0);

viewHeight = view.getMeasuredHeight();

}

}

/**

* 设置当前移动的方向

*

* @param currentMove true上滑 false下滑

*

*/

public void setCurrentMove(boolean currentMove) {

isCurrentMove = currentMove;

if (isCurrentMove){

moveUp();

}else {

moveDown();

}

}

/**

* 向上滑动

*

* 隐藏view

*/

private void moveUp(){

if (!isUp){

if ((animator!=null&&animator.isRunning()))return;

animator = ValueAnimator.ofFloat(1,0);

animator.setDuration(animTime);

animator.start();

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float scale= (float) animation.getAnimatedValue();

updateViewHeight(scale);

}

});

isUp = true ;

isDown = false ;

}

}

/**

* 向下滑动

*

* 显示出view

*/

private void moveDown(){

if (!isDown){

if ((animator!=null&&animator.isRunning()))return;

animator = ValueAnimator.ofFloat(0,1);

animator.setDuration(animTime);

animator.start();

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float scale= (float) animation.getAnimatedValue();

updateViewHeight(scale);

}

});

isUp = false ;

isDown = true ;

}

}

/**

* 更新view的height

*

* @param val

*/

private void updateViewHeight(float val){

ViewGroup.LayoutParams params = view.getLayoutParams();

params.height = (int) (viewHeight * val);

view.setLayoutParams(params);

}

}

在activity的调用

//实例化对象

ViewVisibilityOrGone viewVisibilityOrGone=new ViewVisibilityOrGone(view);

//上滑

viewVisibilityOrGone.setCurrentMove(true);

//下滑

viewVisibilityOrGone.setCurrentMove(false);

本文完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值