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
点击打开链接
先上效果图:
实现逻辑:
第一步:因为此动画是在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
点击打开链接
相关文章推荐
- android ListView向上滑动隐藏标题,下拉显示标题栏
- ListView上滑和下滑,显示和隐藏Toolbar的实现方法
- android ListView向上滑动隐藏标题,下拉显示标题栏
- ListView上滑和下滑,显示和隐藏Toolbar
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- 简单实现下滑隐藏标题栏 上滑显示
- listview的edittext如何获得焦点,android 软键盘的显示与隐藏
- 关注状态栏标题栏的显示与隐藏
- 【android】 ListView 动态显示隐藏header和footer问题
- CListViewCtrl和CListCtrl设置滚动条的隐藏和显示
- android中ExpandableListView点击哪一条那一条显示,而其他条隐藏的实现办法
- android---listView分割线的显示和隐藏
- listiview嵌套listview时带索引的定位,且隐藏不想显示的item
- C# winform 窗体怎么隐藏标题栏,不显示标题栏
- 仿QQ空间标题栏显示隐藏
- Listview滑动(隐藏、显示)Bannner(topview)图
- Android Xlistview 或者 listview改变控件显示隐藏,chekBox状态发生改变,下拉,上划出现错乱。
- 上滑 显示底部 下滑 隐藏顶部 协调者布局
- 通过按钮显示隐藏listview中的数据