Android -- Toolbar跟随ListView滑动隐藏和显现
2015-05-13 08:54
260 查看
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/main_list_view" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <android.support.v7.widget.Toolbar android:id="@+id/main_bar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/std_color_A" /> </RelativeLayout>
代码
public class MainActivity extends BaseActivity{ private static final String TAG = MainActivity.class.getSimpleName(); private Toolbar mMainToolbar = null; private ListView mMainListView = null; private float mStartY = 0, mLastY = 0, mLastDeltaY; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMainToolbar = (Toolbar)this.findViewById(R.id.main_bar); this.setSupportActionBar(mMainToolbar); mMainListView = (ListView)this.findViewById(R.id.main_list_view); final View header = LayoutInflater.from(this).inflate(R.layout.layout_header, null);//这个header高度要与toolbar相同 mMainListView.addHeaderView(header); mMainListView.setAdapter(new AudioAdapter(this)); mMainListView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { final float y = event.getY(); float translationY = mMainToolbar.getTranslationY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mStartY = y; mLastY = mStartY; break; case MotionEvent.ACTION_MOVE: float mDeltaY = y - mLastY; float newTansY = translationY + mDeltaY; if (newTansY <= 0 && newTansY >= -mMainToolbar.getHeight()) { mMainToolbar.setTranslationY(newTansY); } mLastY = y; mLastDeltaY = mDeltaY; break; case MotionEvent.ACTION_UP: ObjectAnimator animator = null; Log.d(TAG, "mLastDeltaY=" + mLastDeltaY); if (mLastDeltaY < 0 && mMainListView.getFirstVisiblePosition() > 1) { Log.v(TAG, "listView.first=" + mMainListView.getFirstVisiblePosition()); animator = ObjectAnimator.ofFloat(mMainToolbar, "translationY", mMainToolbar.getTranslationY(), -mMainToolbar.getHeight()); } else { animator = ObjectAnimator.ofFloat(mMainToolbar, "translationY", mMainToolbar.getTranslationY(), 0); } animator.setDuration(100); animator.start(); animator.setInterpolator(AnimationUtils.loadInterpolator(MainActivity.this, android.R.interpolator.linear)); break; } return false; } }); } }
先用我们自己的Toolbar替换原来的ActionBar,注意,在你的AppTheme中,windowActionbar这一项要设置为false才能用我们自己的去替换原来的,不然运行会报错,然后给Listview一个与Toolbar等高的headerView。然后再设置Touch事件的监听,在onTouch方法的ACTION_MOVE分支中,我们计算出本次触发move事件与上次触发move或者down事件时候,我们的触发点的位置变化量-mDeltaY,然后计算出一个相应的translationY,经过与Toolbar高度比较,判断出新的translationY是否合法,合法,则用setTranslationY方法,给Toolbar赋值。触发UP事件:当触发了UP事件后,就要,我们就要用一个动画,来过度一下。先判断滑动方向,方向向上,则向上滑动,向下,则向下滑动。
我是天王盖地虎的分割线
参考:http://blog.csdn.net/boybeak/article/details/41410113相关文章推荐
- Android Toolbar跟随ListView滑动隐藏和现实
- Android Toolbar跟随ListView滑动隐藏和现实
- Android:菜单栏Menubar跟随ListView滑动隐藏和显示
- Android学习笔记-实现toolBar跟随ListView滑动显示与隐藏
- Android list列表滑动显示隐藏toolbar(ListView)
- android——自定义滑动隐藏(结合FrameLayout+ScrollView)+ListView滑动隐藏
- 【Android】(已更新解决方案)更新SDK版本(25)后,自定义FloatingActionButton的Behavior(跟随列表滑动显示隐藏)只隐藏不出现的问题
- Android 中实现ListView滑动隐藏标题栏的代码
- Android View深入学习——实现QQ滑动显示隐藏按钮ListView
- AndroidStudio Toolbar 滑动隐藏以及返回按钮点击事件
- AndroidSwipeLayout的使用(listview,gridview,view中滑动显示隐藏按钮的使用)
- Android WebView滑动隐藏Toolbar
- android ListView向上滑动隐藏标题,下拉显示标题栏
- Android ListView GridView添加 padding后padding部分不跟随滑动移动问题解决方案
- Android list列表滑动显示隐藏toolbar(RecyleView)
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- ListView滑动隐藏显示ToolBar的实例
- fragment中实现listView的滑动隐藏toolbar
- android listview headerview 滑动显示与隐藏标题(记录)