您的位置:首页 > 其它

listview 上滑隐藏标题栏,下滑显示标题栏

2018-03-20 14:25 736 查看
此demo实现listview上滑隐藏标题栏,下滑显示标题栏,解决了出现空白问题,添加了隐藏显示动画效果;
先上效果图:



实现逻辑:
第一步:因为此动画是在fragment写的,首先监听activity的dispatchTouchEvent()方法,看fragment是否注册了监听,如果注册,则会执行这个监听;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.dispatchTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
第二步:在fragment中注册监听,在dispatchTouchEvent()监听滑动,实现了AnimatorListener,重写了四个方法,当动画完成监听里,使改动listview位置; private boolean dispathTouchEvent(MotionEvent event) {
if (mIsAnim) {
return false;
}
final int action = event.getAction();

float x = event.getX();
float y = event.getY();

switch (action) {
case MotionEvent.ACTION_DOWN:
lastY = y;
lastX = x;
return false;
case MotionEvent.ACTION_MOVE:
//返回 int 值的绝对值
float dY = Math.abs(y - lastY);
float dX = Math.abs(x - lastX);
//判断是上滑还是下滑
boolean down = y > lastY ? true : false;
lastY = y;
lastX = x;
isUp = dX < 8 && dY > 8 && !mIsTitleHide && !down;
isDown = dX < 8 && dY > 8 && mIsTitleHide && down;

if (isUp) {
View view = this.mLayout;
float[] f = new float[2];
f[0] = 0.0F;
f[1] = -hide_title_layout.getHeight();
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "translationY", f);//动画
animator1.setDuration(200);
animator1.start();
animator1.addListener(this);
setMarginTop(mLayout.getHeight() - hide_title_layout.getHeight());//设置listview位置
} else if (isDown) {
View view = this.mLayout;
float[] f = new float[2];
f[0] = -hide_title_layout.getHeight();
f[1] = 0F;
ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "translationY", f);
animator1.setDuration(200);
animator1.setInterpolator(new AccelerateDecelerateInterpolator());

4000
animator1.start();
animator1.addListener(this);
} else {
return false;
}
mIsTitleHide = !mIsTitleHide;
mIsAnim = true;
break;
default:
return false;
}
return false;

}设置listview距离顶部位置: RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
layoutParam.setMargins(0, height, 0, 0);
mListView.setLayoutParams(layoutParam);
mListView.invalidate();下面附上demo地址 https://download.csdn.net/download/shanshan_1117/10297452
点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: