首页 > 代码库 > Android实现固定头部信息,挤压动画(类似通讯录)

Android实现固定头部信息,挤压动画(类似通讯录)

半年前,那时候我还是个大四的学生,每天都在找工作度过,想去北京体验一下蚁族生活,奋然离开了济南,哎...在济南我们学校还是数得着的好学校,去了北京就什么都不是了,一切的辛酸只有自己知道,那时候的我只找开发方面的工作,也第一次体会到了女生的劣势...

在找工作的过程中,大部分都是实习,跟我的预想有点冲突,去了XX集团,人家只要211,985的,没办法,去了XX工厂收到了类似通讯录的这么个任务...


废话少说,开始今天的主题

在很多应用中,看到这样的listview:listview滑动过程中分组标题固定在上方,当第二个组滑上来时,第一个组才跟着上滑,下一个组固定,直到该组也滑出上边缘。

有位大神们写的比较高深,可以去借鉴一下http://blog.csdn.net/guolin_blog/article/details/9033553

由于我比较菜鸟,所以方法比较简单,但实现的功能差不多,主要使用了git上的源码,直接拿来调用了

1.从github上下载源码,下载地址http://blog.csdn.net/guolin_blog/article/details/9033553

2.把PinnedHeaderListView中的library导入项目中

3.新建项目,并引用library

大概内容就这些,下面简单介绍一下代码:

1.在MainActivity的布局文件中加入以下代码:

给个小技巧,按住shift+ctrl+T,输入PinnedHeaderListView就能找到za.co.immedia.pinnedheaderlistview.PinnedHeaderListView,直接写进去就可以

<za.co.immedia.pinnedheaderlistview.PinnedHeaderListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

2.其实PinnedHeaderListView继承的ListView,所以用法也差不多,下一步就需要写Adapter了,个人习惯比较喜欢自定义,可以按照自己的想法来写,但是适配器要继承SectionedBaseAdapter

/**
 * 
 */
package com.thea.pinnedsectiondemo.adapter;

import java.util.List;

import com.thea.pinnedsectiondemo.R;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import za.co.immedia.pinnedheaderlistview.SectionedBaseAdapter;

/**
 * @author thea
 *
 * 2014-10-16
 */
public class MyPinnedListViewAdapter extends SectionedBaseAdapter{
	
	private List<String> sectionList;
	private List<String> list;
	private Context context;

	public MyPinnedListViewAdapter(Context context,List<String> sectionList, List<String> list) {
		super();
		this.sectionList = sectionList;
		this.list = list;
		this.context = context;
	}

	@Override
	public Object getItem(int section, int position) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int section, int position) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int getSectionCount() {
		// TODO Auto-generated method stub
		return sectionList.size();
	}

	@Override
	public int getCountForSection(int section) {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public View getItemView(int section, int position, View convertView,
			ViewGroup parent) {
		ViewHold hold=null;
		if (convertView==null) {
			hold=new ViewHold();
			convertView=LinearLayout.inflate(context, R.layout.list_item, null);
			hold.tv_item=(TextView) convertView.findViewById(R.id.tv_item);
			convertView.setTag(hold);
		} else {
			hold=(ViewHold) convertView.getTag();
		}
		hold.tv_item.setText(list.get(position));
		return convertView;
	}

	@Override
	public View getSectionHeaderView(int section, View convertView,
			ViewGroup parent) {
		ViewHold hold=null;
		if (convertView==null) {
			hold=new ViewHold();
			convertView=LinearLayout.inflate(context, R.layout.section_item, null);
			hold.tv_section=(TextView) convertView.findViewById(R.id.tv_section_item);
			convertView.setTag(hold);
		} else {
			hold=(ViewHold) convertView.getTag();
		}
		hold.tv_section.setText(sectionList.get(section));
		return convertView;
	}

	class ViewHold{
		private TextView tv_section,tv_item;
		
	}
}

3.剩下的就是MainActivity,其实就跟ListView的使用都一样了,这里就不贴代码了

ok,完成

源码下载地址:http://download.csdn.net/detail/elinavampire/8047885


Android实现固定头部信息,挤压动画(类似通讯录)