标签:android listview adapter listview折叠 android手风琴
最近些一个名片夹得app。其中名片夹客户要求做成可折叠伸缩的效果,真是费了好大劲啊~~~啥都不说了看效果图吧~~
package com.cards.activity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.cards.R;
public class CardsListAct extends ListActivity implements OnScrollListener,
OnItemClickListener {
private static String LAYOUT_INFLATER_SERVICE = Context.LAYOUT_INFLATER_SERVICE;
public static final String TV_CARDS_NAME = "tv_cards_name";
public static final String TV_CARDS_PHONENUMINFO = "tv_cards_phoneNumInfo";
public static final String TV_CARDS_ADDRESSINFO = "tv_cards_addressInfo";
public static final String TV_CARDS_MAILINFO = "tv_cards_mailInfo";
public static final String TV_CARDS_OTHERINFO = "tv_cards_otherInfo";
public static final String TV_CARD_NAME = "tv_card_name";
private LayoutInflater mInflater;
private FlexListAdapter adapter;
private List<Map<String, String>> contentDefileList;
private boolean[] isCurrentItems;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mInflater = (LayoutInflater) this
.getSystemService(LAYOUT_INFLATER_SERVICE);
init();
setListAdapter(adapter);
getListView().setBackgroundColor(Color.WHITE);
getListView().setCacheColorHint(Color.TRANSPARENT);
getListView().setDivider(
getResources().getDrawable(R.color.transparent));
getListView().setSelector(R.drawable.work_detail_click_bg);
getListView().setOnScrollListener(this);
getListView().setOnItemClickListener(this);
}
/**
* 初始化数据
*/
private void init() {
contentDefileList = new ArrayList<Map<String, String>>();
Map<String, String> contentDefile = new HashMap<String, String>();
contentDefile.put(TV_CARDS_NAME, "张三");
contentDefile.put(TV_CARD_NAME, "张三");
contentDefile.put(TV_CARDS_PHONENUMINFO, "13933333333");
contentDefile.put(TV_CARDS_ADDRESSINFO, "保定市高开区朝阳北大街866号(保百购物广场南侧)");
contentDefile.put(TV_CARDS_MAILINFO, "1111@qq.com");
contentDefile.put(TV_CARDS_OTHERINFO, "部门经理");
Map<String, String> contentDefile_1 = new HashMap<String, String>();
contentDefile_1.put(TV_CARDS_NAME, "李四");
contentDefile_1.put(TV_CARD_NAME, "李四");
contentDefile_1.put(TV_CARDS_PHONENUMINFO, "13933333333");
contentDefile_1.put(TV_CARDS_ADDRESSINFO, "保定市高开区朝阳北大街866号(保百购物广场南侧)");
contentDefile_1.put(TV_CARDS_MAILINFO, "1111@qq.com");
contentDefile_1.put(TV_CARDS_OTHERINFO, "经理");
Map<String, String> contentDefile_2 = new HashMap<String, String>();
contentDefile_2.put(TV_CARDS_NAME, "王五");
contentDefile_2.put(TV_CARD_NAME, "王五");
contentDefile_2.put(TV_CARDS_PHONENUMINFO, "13933333333");
contentDefile_2.put(TV_CARDS_ADDRESSINFO, "hfdkajshfkadsjflkajsdlkf");
contentDefile_2.put(TV_CARDS_MAILINFO, "1111@qq.com");
contentDefile_2.put(TV_CARDS_OTHERINFO, "经理");
Map<String, String> contentDefile_3 = new HashMap<String, String>();
contentDefile_3.put(TV_CARDS_NAME, "vvv");
contentDefile_3.put(TV_CARD_NAME, "vvv");
contentDefile_3.put(TV_CARDS_PHONENUMINFO, "13933333333");
contentDefile_3.put(TV_CARDS_ADDRESSINFO, "hfdkajshfkadsjflkajsdlkf");
contentDefile_3.put(TV_CARDS_MAILINFO, "1111@qq.com");
contentDefile_3.put(TV_CARDS_OTHERINFO, "设计师");
Map<String, String> contentDefile_5 = new HashMap<String, String>();
contentDefile_5.put(TV_CARDS_NAME, "bbb");
Map<String, String> contentDefile_6 = new HashMap<String, String>();
contentDefile_6.put(TV_CARDS_NAME, "ccc");
contentDefile_6.put(TV_CARD_NAME, "ccc");
Map<String, String> contentDefile_7 = new HashMap<String, String>();
contentDefile_7.put(TV_CARDS_NAME, "ddd");
contentDefile_7.put(TV_CARD_NAME, "ddd");
Map<String, String> contentDefile_4 = new HashMap<String, String>();
contentDefile_4.put(TV_CARDS_NAME, "aaa");
contentDefile_4.put(TV_CARD_NAME, "aaa");
contentDefileList.add(contentDefile);
contentDefileList.add(contentDefile_1);
contentDefileList.add(contentDefile_2);
contentDefileList.add(contentDefile_3);
contentDefileList.add(contentDefile_4);
contentDefileList.add(contentDefile_6);
contentDefileList.add(contentDefile_7);
isCurrentItems = new boolean[contentDefileList.size()];
for (int i = 0; i < isCurrentItems.length; i++) {
isCurrentItems[i] = false;
}
Log.w("TAG", "AutoLoadActivity init() =========>>>>>> come in.");
adapter = new FlexListAdapter();
}
public void onScroll(AbsListView v, int i, int j, int k) {
}
public void onScrollStateChanged(AbsListView v, int state) {
if (state == OnScrollListener.SCROLL_STATE_IDLE) {
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if (isCurrentItems[position]) {
isCurrentItems[position] = false;
} else {
isCurrentItems[position] = true;
}
// 即时刷新
adapter.notifyDataSetChanged();
}
class FlexListAdapter extends BaseAdapter {
int count = contentDefileList.size();
public int getCount() {
return count;
}
public Object getItem(int pos) {
return pos;
}
public long getItemId(int pos) {
return pos;
}
public View getView(int pos, View v, ViewGroup p) {
FlexLinearLayout view = null;
if (null == v) {
view = new FlexLinearLayout(CardsListAct.this,
contentDefileList.get(pos), pos, false);
} else {
view = (FlexLinearLayout) v;
view.setWorkTitleLayout(contentDefileList.get(pos), pos,
isCurrentItems[pos]);
}
return view;
}
}
public class FlexLinearLayout extends LinearLayout {
public static final int BULE = 0xFF3D8CB8;
private LinearLayout layout;
private RelativeLayout rlName;
private RelativeLayout llCards;
private TextView tvCardsPhoneNumInfo;
private TextView tvCardsAddressInfo;
private TextView tvCardsMailInfo;
private TextView tvCardsOtherInfo;
private TextView tvCardsName;
private TextView tvCardName;
/**
* 创建一个带有伸缩效果的LinearLayout
*
* @param context
* @param contextDefail
* 内容详细
* @param position
* 该列所在列表的位置
* @param isCurrentItem
* 是否为伸展
*/
public FlexLinearLayout(Context context,
final Map<String, String> contextDefail, final int position,
boolean isCurrentItem) {
super(context);
layout = (LinearLayout) mInflater.inflate(R.layout.act_cards_list,
null);
rlName = (RelativeLayout) layout.findViewById(R.id.rl_name);
llCards = (RelativeLayout) layout.findViewById(R.id.ll_cards);
tvCardsPhoneNumInfo = (TextView) layout
.findViewById(R.id.tv_cards_phoneNumInfo);
tvCardsName = (TextView) layout.findViewById(R.id.tv_cards_name);
tvCardName = (TextView) layout.findViewById(R.id.tv_card_name);
tvCardsAddressInfo = (TextView) layout
.findViewById(R.id.tv_cards_addressInfo);
tvCardsMailInfo = (TextView) layout
.findViewById(R.id.tv_cards_mailInfo);
tvCardsOtherInfo = (TextView) layout
.findViewById(R.id.tv_cards_otherInfo);
this.addView(layout);
setWorkTitleLayout(contextDefail, position, isCurrentItem);
}
/**
* 设置该列的状态及样式
*
* @param contentDefail
* 内容详细
* @param position
* 该列所在列表的位置
* @param isCurrentItem
* 是否为伸展
*/
public void setWorkTitleLayout(final Map<String, String> contentDefail,
final int position, boolean isCurrentItem) {
rlName.setBackgroundResource((position % 2 == 1) ? R.drawable.title_1
: R.drawable.title_2);
tvCardsName.setText(contentDefail.get(TV_CARDS_NAME));
tvCardsName.setTextColor((position % 2 == 0) ? BULE : Color.WHITE);
if (isCurrentItem) {
Log.d("TAG", "isCurrentItem ============>>>>>>>>> " + position);
tvCardsPhoneNumInfo.setText("电话:"
+ contentDefail.get(TV_CARDS_PHONENUMINFO));
tvCardsMailInfo.setText("邮箱:"
+ contentDefail.get(TV_CARDS_MAILINFO));
tvCardsAddressInfo.setText("地址:"
+ contentDefail.get(TV_CARDS_ADDRESSINFO));
tvCardsOtherInfo.setText(contentDefail.get(TV_CARDS_OTHERINFO));
tvCardName.setText(contentDefail.get(TV_CARD_NAME));
}
llCards.setVisibility(isCurrentItem ? VISIBLE : GONE);
}
}
}
act_cards_list布局文件:
<?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="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/rl_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/transparent" >
<TextView
android:id="@+id/tv_cards_name"
style="@style/cards_item_title"
android:text="路人甲" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/ll_cards"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/iv_card_list_bg"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/ll_cards_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip" >
<TextView
android:id="@+id/tv_card_name"
style="@style/work_detail_row_style"
android:text="路人甲"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_mc_otherInfo"
style="@style/work_detail_row_style"
android:text="财务总监"
android:textColor="@color/blue"
android:textSize="10dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_cards_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_cards_name"
android:orientation="vertical"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/tv_mc_phoneNum"
style="@style/work_detail_row_style"
android:text="18933333333" />
<TextView
android:id="@+id/tv_mc_mail"
style="@style/work_detail_row_style"
android:text="aaaaaaaaaaa@qq.com" />
<TextView
android:id="@+id/tv_mc_addressInfo"
style="@style/work_detail_row_style"
android:layout_width="171dp"
android:layout_centerInParent="true"
android:text="保定市高开区朝阳北大街866号(保百购物广场南侧)" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>赵雅智_AndroidUI_Android中listview可折叠伸缩仿手风琴效果(静态)
标签:android listview adapter listview折叠 android手风琴
原文地址:http://blog.csdn.net/zhaoyazhi2129/article/details/38060769