给listview添加手机监听,根据滑动位置,确定导航栏的隐藏和显示。
mlistView.setOnTouchListener(new View.OnTouchListener() {
private float mEndY;
private float mStartY;
private int direction;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
mEndY = event.getY();
float v1 = mEndY - mStartY;
if (v1 > 3 && !isRunning && direction == 1) {
direction = 0;
showBar();
mStartY = mEndY;
return false;
} else if (v1 < -3 && !isRunning && direction == 0) {
direction = 1;
hideBar();
mStartY = mEndY;
return false;
}
mStartY = mEndY;
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
导航栏的获取方式,注意底部导航栏的获取。然后就是显示和隐藏的动画。
//底部导航栏
mBottom_bar = (LinearLayout) getParent().findViewById(R.id.bottom);
//顶部搜索栏
mHead_bar = (LinearLayout) findViewById(R.id.head_bar);
/**隐藏导航栏*/
public void hideBar() {
mHeaderAnimator = ObjectAnimator.ofFloat(mHead_bar, "translationY", -mHead_bar.getHeight());
mBottomAnimator = ObjectAnimator.ofFloat(mBottom_bar, "translationY", mBottom_bar.getHeight());
mHeaderAnimator.setDuration(300).start();
mBottomAnimator.setDuration(300).start();
mHeaderAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
isRunning = true;
}
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
isRunning = false;
}
});
}
/**显示导航栏*/
public void showBar() {
mHeaderAnimator = ObjectAnimator.ofFloat(mHead_bar, "translationY", 0);
mBottomAnimator = ObjectAnimator.ofFloat(mBottom_bar, "translationY", 0);
mHeaderAnimator.setDuration(300).start();
mBottomAnimator.setDuration(300).start();
}