仿qq联系人分层list&&分组悬浮向上滚动效果 最简化demo

来源:互联网 发布:上瘾网络剧全集下载 编辑:程序博客网 时间:2024/05/16 17:04

最近比较闲,自己整理点比较常用的demo简单分析下 给以后留个思路。。。侧重思路,代码质量会比较差,。。github上有不少大神封装好的开源组件,大家可以去上面找找,会有惊喜的。。

好吧,先来个通讯录的。。


之前一直以为是list套list会比较麻烦,现在才发现原来还比较简单,其实就是个list,只是每个item中都有个相当于分层的模块,默认为gone。当检测到上下两个item的

首字母不同的时候,就让为gone的模块显示出来,就好啦。


浮动的效果我的思路是:

将想要浮动效果的view单独拿出来,跟listview 平齐放置,当监测到listview 滚动的时候,让浮动view显示出来,并显示跟最上层listite相关的内容。当停止滚动的时候,浮动view消失不见。

这样大概就实现了效果(不知道别人怎么弄的。。),具体效果可以自行定义。

直接上代码

package com.temp;import java.util.Arrays;import java.util.Comparator;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.animation.AlphaAnimation;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class TempActivity extends Activity {// 测试 分层listListView listView;String[] ss = { "01", "12", "71", "21", "31", "91", "51", "19", "55", "38","24", "01", "41", "81", "88", "27" };LayoutInflater layoutInflater;TextView headerText;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.testlist);//浮动view 这里只有个textheaderText=(TextView) findViewById(R.id.header);listView = (ListView) findViewById(R.id.list);layoutInflater = getLayoutInflater();sortString();listView.setAdapter(new Adapter());//控制浮动view的显示listView.setOnScrollListener(new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {// TODO Auto-generated method stub//为0表示停止,非0 滚动if (scrollState==0) {headerText.setVisibility(View.GONE);AlphaAnimation alphaAnimation=new AlphaAnimation(1.0f, 0.0f);alphaAnimation.setDuration(300);headerText.setAnimation(alphaAnimation);alphaAnimation.start();}else {headerText.setVisibility(View.VISIBLE);AlphaAnimation alphaAnimation=new AlphaAnimation(0.0f, 1.0f);alphaAnimation.setDuration(300);headerText.setAnimation(alphaAnimation);alphaAnimation.start();}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {// TODO Auto-generated method stubheaderText.setText(getIndex(ss[firstVisibleItem]));}});}private void sortString() {Arrays.sort(ss, new CustomComparator());};class CustomComparator implements Comparator<String> {public int compare(String str1, String str2) {int name1 = Integer.parseInt(str1);int name2 = Integer.parseInt(str2);return name1 - name2;}}private class Adapter extends BaseAdapter {@Overridepublic int getCount() {// TODO Auto-generated method stubreturn ss.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder;if (convertView == null) {convertView = layoutInflater.inflate(R.layout.list_item, null);holder = new ViewHolder();holder.name = (TextView) convertView.findViewById(R.id.name);holder.alapha = (TextView) convertView.findViewById(R.id.index);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.name.setText(ss[position]);// 判断当前 index 跟上个index 有无区别String currentStr = getIndex(ss[position]);String previousStr = (position - 1) >= 0 ? getIndex(ss[position-1]) : " ";if (!currentStr.equals(previousStr)) {holder.alapha.setText(currentStr);holder.alapha.setVisibility(View.VISIBLE);} else {holder.alapha.setVisibility(View.GONE);}return convertView;}class ViewHolder {TextView alapha;TextView name;}}private String getIndex(String str){return str.trim().substring(0, 1).charAt(0)+"";};}


testlist.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextViewandroid:id="@+id/header"android:layout_width="fill_parent"  android:layout_height="wrap_content"android:textColor="#99CCFF"android:textSize="25sp"android:layout_marginLeft="10dip"android:background="#666666"android:visibility="gone" />    <ListView        android:id="@+id/list"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:scrollbars="none"    /></RelativeLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"><TextViewandroid:id="@+id/index"android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:background="#333333"android:textColor="#99CCFF"android:textAppearance="?android:textAppearanceMedium"android:visibility="gone" />    <TextView    android:id="@+id/name"    android:textAppearance="?android:textAppearanceMedium"    android:layout_width="wrap_content"    android:layout_height="fill_parent"    android:layout_marginTop="6.0dip"    android:layout_below="@id/index"     /></RelativeLayout>

参考博客 http://www.cnblogs.com/xiaoQLu/archive/2011/12/20/2293732.html

原创粉丝点击