Android 彻底征服 ListView 三 自动显示 隐藏布局的ListView
来源:互联网 发布:索隆体育淘宝真假 编辑:程序博客网 时间:2024/06/03 15:53
当我们在ListView上滑动的时候,顶部的ActionBar或者ToolBar就会响应的隐藏或显示,在滚动前界面上加载了上方的标题栏和右下角的悬浮编辑按钮.当用户项下滚动时,标题栏和悬浮按钮消失,让用户有更大的空间去阅读.让一个布局显示或者隐藏并带有动画效果,可以通过属性动画来很方便地实现,所以这个效果的关键就在于如何获得ListView的各种滑动事件.
所以借助View的OnTouchListener接口来监听ListView的滑动,通过比较与上次坐标的大小,来判断滑动的方向,并通过滑动的方向来判断是否需要显示或隐藏对应的布局.
//首先我们需要先将ListView增加Header View header = new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, (int) getResources().getDimension( R.dimen.abc_action_bar_default_height_material))); mListView.addHeaderView(header);
通过abc_action_bar_default_height_material属性获取系统Actionbar的高度,并设置给HeaderView.
定义一个mTouchSlop变量用来获取系统认为的最低滑动距离,即超过这个距离才算滑动
获取方法:
int mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
判断滑动事件:
View.OnTouchListener myTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mFirstY = event.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY = event.getY(); if (mCurrentY - mFirstY > mTouchSlop) { direction = 0;// down } else if (mFirstY - mCurrentY > mTouchSlop) { direction = 1;// up } if (direction == 1) { if (mShow) { toolbarAnim(1);//show mShow = !mShow; } } else if (direction == 0) { if (!mShow) { toolbarAnim(0);//hide mShow = !mShow; } } break; case MotionEvent.ACTION_UP: break; } return false; } };
通过滑动点的坐标改变大小,来判断移动的方向,并根据移动方向来执行不同的动画效果.
最后加上控制布局显示隐藏的动画:
private void toolbarAnim(int flag) { if (mAnimator != null && mAnimator.isRunning()) { mAnimator.cancel(); } if (flag == 0) { mAnimator = ObjectAnimator.ofFloat(mToolbar, "translationY", mToolbar.getTranslationY(), 0); } else { mAnimator = ObjectAnimator.ofFloat(mToolbar, "translationY", mToolbar.getTranslationY(), -mToolbar.getHeight()); } mAnimator.setDuration(2000); mAnimator.start(); }
本程序使用了Toolbar一定要注意使用的theme一定是要NoActionBar的,不然会引起冲突.
最终显示效果:当向上滑动时,Toolbar隐藏.再向下滑动时,Toolbar显示.
0 0
- Android 彻底征服 ListView 三 自动显示 隐藏布局的ListView
- Android 彻底征服 ListView 五 动态改变ListView布局
- Android 自动显示与隐藏布局的 ListView
- 【Android UI】自动显示、隐藏布局的ListView
- 自动显示与隐藏布局的ListView
- Android 彻底征服 ListView 二 具有弹性的ListView
- 实现ListView的条目下自动隐藏显示的布局
- 自动显示和隐藏头布局的ListView(转)
- Android群英传学习笔记——自动显示、隐藏布局的ListView
- Android 彻底征服 ListView 一 (实用篇)
- Android 彻底征服 ListView 四 QQ微信 聊天ListView
- ListView的多种布局显示(三)
- 自动显示和隐藏头布局的ListView原来是那么简单
- Android群英传——第四章自动显示隐藏ActionBar/Toolbar的ListView
- android listview 显示不同布局
- ListView的多布局显示
- ListView的多布局显示
- android 关于在ListView 显示和隐藏checkboxes的实现。
- redis 相关信息
- 使用Python访问restAPI接口
- Java小程序:输入字母和数字,输出时字母在前数字在后
- HTML5 参考手册
- android-------使用Android应用调用Web Service
- Android 彻底征服 ListView 三 自动显示 隐藏布局的ListView
- Getting started with JRebel for Android
- 产品经理三大领域的技术
- object-c中数组的某些知识
- Android 手把手教您自定义ViewGroup(一)
- NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags'
- MySQL基础1——Express与MySQL联调.md
- 如何从Eclipse导入github上的项目源码
- 敏捷课程培训