布局

<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

更多相关文章

  1. android如何改变默认横竖屏方向
  2. Android获取状态栏高度的方法
  3. Android事件分发机制——ViewGroup(二)
  4. Android Touch事件
  5. Android中Touch事件的处理逻辑
  6. Android 中屏幕点击事件的实现
  7. Android ListView中的Button屏蔽onItemClick事件解决办法

随机推荐

  1. Android(安卓)本地图片多选
  2. Android(安卓)– Video/Music 视频音乐播
  3. Android(安卓)基于GeolocationAPI的基站
  4. android之简单的计算器样式界面
  5. Android(安卓)ActivityManager工具类
  6. Android圆形进度条
  7. Android(安卓)OneDayOneExample-1.页面互
  8. Android的第一个入门简单例子
  9. Android(安卓)Studio, gradle and NDK in
  10. Android: Bluetooth profile