滑动隐藏和显示标题栏
1.MainActivity.java
import android.content.Context;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends ActionBarActivity {
private ListView mListView;
private RelativeLayout mTitle;
private int mTouchSlop; //滑动限定停止值
private ListAdapter mAdapter; //适配器
private float mFirstY;
private float mCurrentY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
initView();
showOrHide(true);
}
private void initView() {
mListView = (ListView) findViewById(R.id.listview);
mTitle = (RelativeLayout) findViewById(R.id.id_title);
mAdapter = new ListAdapter(this,getData());
mListView.setAdapter(mAdapter);
mListView.setOnTouchListener(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) {
showOrHide(true); //下滑 显示titlebar
} else if (mFirstY - mCurrentY > mTouchSlop) {
showOrHide(false); //上滑 隐藏titlebar
}
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
}
private List<String> getData() {
List<String> data = new ArrayList<>();
for(int i = 0;i < 30;i++){
data.add(String.valueOf(i));
}
return data;
}
private Animator mAnimationTitle;
private Animator mAnimationContent;
private void showOrHide(boolean tag) {
if (mAnimationTitle != null && mAnimationTitle.isRunning()) {
mAnimationTitle.cancel();
}
if (mAnimationContent != null && mAnimationContent.isRunning()) {
mAnimationContent.cancel();
}
if (tag) {
mAnimationTitle = ObjectAnimator.ofFloat(mTitle, "translationY", mTitle.getTranslationY(), 0);
mAnimationContent = ObjectAnimator.ofFloat(mListView, "translationY", mListView.getTranslationY(), getResources().getDimension(R.dimen.title));
} else {
mAnimationTitle = ObjectAnimator.ofFloat(mTitle,"translationY",mTitle.getTranslationY(),-mTitle.getHeight());
mAnimationContent = ObjectAnimator.ofFloat(mListView,"translationY",mListView.getTranslationY(),0);
}
mAnimationTitle.start();
mAnimationContent.start();
}
class ListAdapter extends BaseAdapter{
private List<String> list;
private LayoutInflater inflater;
public ListAdapter(Context content,List<String> list){
this.list = list;
inflater = LayoutInflater.from(content);
}
@Override
public int getCount() {
return list == null ? 0 :list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolper vh = null;
if(convertView == null){
vh = new ViewHolper();
convertView = inflater.inflate(R.layout.lv_item,parent,false);
vh.text = (TextView) convertView.findViewById(R.id.list_item);
convertView.setTag(vh);
}else{
vh = (ViewHolper) convertView.getTag();
}
vh.text.setText(list.get(position));
return convertView;
}
class ViewHolper{
TextView text;
}
}
}
2.标题栏的高度值
<dimen name="title">50dp</dimen>
3.布局文件
lv_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="35dp"
android:gravity="center"
/>
</LinearLayout>
activity_main.xml
<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"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/id_title"
android:background="#0ac39e"
android:layout_width="match_parent"
android:layout_height="@dimen/title">
<TextView
android:text="两颗心"
android:layout_centerInParent="true"
android:textSize="22sp"
android:textColor="#ffffff"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>