滑动隐藏和显示标题栏
来源:互联网 发布:求职网站 知乎 编辑:程序博客网 时间:2024/05/18 02:31
滑动隐藏和显示标题栏
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>
0 0
- 滑动隐藏和显示标题栏
- iOS-UIScrollview滑动时标题栏自动隐藏和显示效果
- 标题栏的滑动隐藏和显示是怎么实现的?
- 隐藏标题栏和底部操作栏,可上下滑动显示
- 隐藏和显示标题栏
- MFC 隐藏和显示标题栏
- 顶部标题栏随滑动时的渐变隐藏和渐变显示
- 滑动隐藏标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- android ListView向上滑动隐藏标题,下拉显示标题栏
- MFC隐藏和显示任务栏与标题栏
- 滑动隐藏标题栏布局ListView
- 简易:ListView滑动隐藏标题栏
- Android 隐藏,显示标题栏
- 标题栏显示与隐藏
- 第三届蓝桥杯初赛四之奇怪的比赛法四
- 对于Sqlite,删除Sqlite数据库中的所有表
- 第三方库
- Java环境下实现oracle数据库的备份与还原
- MongoDB 或者 redis 是否可以替代 memcached
- 滑动隐藏和显示标题栏
- HttpServlet详解
- 本·拉登的书架:Python文本分析拉登最常念叨什么?
- java开发之路书单
- leetcode第一题
- "=="和equals和equalsIgnoreCase三者的区别
- [NOIP2004]合并果子 T2 数据结构 简单贪心
- c++之动态库和静态库的区别
- CSS3中的2D变形