Android——UI篇:使用pinnedheaderlistview实现联系人头部滑动到顶部定住的功能

来源:互联网 发布:玛丽莲曼森的衣服淘宝 编辑:程序博客网 时间:2024/05/21 11:36

一、先看效果图


二、为了使用方便,这里我将这个功能打成了一个jar包,在这里附上jar包的下载

http://download.csdn.net/detail/qq_35373333/9909677

三、先贴三个布局文件:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">    <com.example.zhuxiaofeng.pinnedheaderlistviewdemo.PinnedHeaderListView        android:id="@+id/pinnedListView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="@android:color/white">    </com.example.zhuxiaofeng.pinnedheaderlistviewdemo.PinnedHeaderListView></LinearLayout>

header_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="horizontal"              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:background="#aa000000">    <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/textItem"            android:height="82dp"            android:textColor="#FFFFFFFF"/></LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:background="#FFF"    android:orientation="horizontal">    <TextView        android:id="@+id/textItem"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:height="42dp"        android:background="#FFF"        android:textColor="#FF000000" /></LinearLayout>
下面是适配器和Activity的代码:
新建一个适配器继承自:SectionedBaseAdapter
package com.example.zhuxiaofeng.pinnedheaderlistviewdemo;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.LinearLayout;import android.widget.TextView;import com.example.pinnedheaderlistview.SectionedBaseAdapter;public class TestSectionedAdapter extends SectionedBaseAdapter {    @Override    public Object getItem(int section, int position) {        return null;    }    @Override    public long getItemId(int section, int position) {        return 0;    }    /**     * item的条数     *     * @return     */    @Override    public int getSectionCount() {        return 7;    }    /**     * 每一个item下的条数     *     * @param section     * @return     */    @Override    public int getCountForSection(int section) {        return 15;    }    /**     * item布局     *     * @param section     * @param position     * @param convertView     * @param parent     * @return     */    @Override    public View getItemView(int section, int position, View convertView, ViewGroup parent) {        LinearLayout layout = null;        if (convertView == null) {            LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);            layout = (LinearLayout) inflator.inflate(R.layout.list_item, null);        } else {            layout = (LinearLayout) convertView;        }        ((TextView) layout.findViewById(R.id.textItem)).setText("Section " + section + " Item " + position);        return layout;    }    /**     * item头布局     *     * @param section     * @param convertView     * @param parent     * @return     */    @Override    public View getSectionHeaderView(int section, View convertView, ViewGroup parent) {        LinearLayout layout = null;        if (convertView == null) {            LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);            layout = (LinearLayout) inflator.inflate(R.layout.header_item, null);        } else {            layout = (LinearLayout) convertView;        }        ((TextView) layout.findViewById(R.id.textItem)).setText("Header for section " + section);        return layout;    }}
适配器很简单,重要的方法注释都加上了,如果还是看不太懂的话建议运行一下项目,跑起来就瞬间懂了。
再看Activity代码:
package com.example.zhuxiaofeng.pinnedheaderlistviewdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.example.pinnedheaderlistview.PinnedHeaderListView;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        PinnedHeaderListView listView = (PinnedHeaderListView) findViewById(R.id.pinnedListView);        TestSectionedAdapter sectionedAdapter = new TestSectionedAdapter();        listView.setAdapter(sectionedAdapter);    }}

好了,项目运行起来后就看到开始如图的效果了。


阅读全文
0 0
原创粉丝点击