注意:Activity必须是NoActionBar的,否则会引起冲突
在values/styles.xml里添加
<style name="AppTheme1" parent="Theme.AppCompat.Light.NoActionBar">
</style>
清单文件里使用这个主题android:theme=”@style/AppTheme1”
package com.example.zhuang.tiaoxing;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ScrollHideListView extends Activity{
private Toolbar mToolbar;
private ListView mListView;
private String[] mStr = new String[20];
private int mTouchSlop;//超过滑动距离隐藏
private float mCurrent;
private float mFirstY;
private int direction;//方向的标记
private ObjectAnimator mAnimation;
private boolean mShow = true;
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:
mCurrent = event.getY();
if(mCurrent - mFirstY > mTouchSlop){
direction = 0;//标记方向向下
}else if(mFirstY - mCurrent > mTouchSlop){
direction = 1;//标记方向向上滑动
}
if(direction == 1){//如果向上滑动,且ToolBar显示着,开启消失的动画,将标记显示为false
if(mShow){
toolbarAnim(1);
mShow = !mShow;
}
}else if(direction == 0){//如果向下滑动,且ToolBar没有显示,开启展开的动画,将标记显示为true
if(!mShow){
toolbarAnim(0);
mShow = !mShow;
}
}
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.volume);
mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mListView = (ListView) findViewById(R.id.listview);
for (int i = 0;i < mStr.length;i++){
mStr[i] = "壮少好帅啊" + i;
}
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);
mListView.setAdapter(new ArrayAdapter<String>(
ScrollHideListView.this,android.R.layout.simple_expandable_list_item_1,mStr
));
mListView.setOnTouchListener(myTouchListener);
}
//ToorBar动画
private void toolbarAnim(int flag){
if(mAnimation != null && mAnimation.isRunning()){
mAnimation.cancel();
}
if(flag == 0){//显示ToolBar
ofFloat()方法的第一个参数表示动画操作的对象(可以是任意对象),
// 第二个参数表示操作对象的属性名字(只要是对象有的属性都可以),
// 第三个参数之后就是动画过渡值。当然过度值可以有一个到N个,
// 如果是一个值的话默认这个值是动画过渡值的结束值。如果有N个值,动画就在这N个值之间过渡。
mAnimation = ObjectAnimator.ofFloat(mToolbar,
"translationY",mToolbar.getTranslationY(),0);
}else{//隐藏ToolBar
mAnimation = ObjectAnimator.ofFloat(mToolbar,
"translationY",mToolbar.getTranslationY(),
-mToolbar.getHeight());
}
mAnimation.start();//开始动画
}
}