Android原生listview做的一个item的伸缩效果。
*永远不要让你老大有机会改需求 package com.example.yunkanglast; import java.io.Serializable; /**
* 状态类
*/
public class PurchasedVipInfo implements Serializable { public enum Type {
CHECK_BOX,
TEXT_VIEW,
NO_CONTENT,
NO_CONTENT_JUMP,
TEXT_VIEW_HEAD
} private String name;
private String desc;
private Type type;
private boolean isChecked;
private boolean isExpend;
private String price; public PurchasedVipInfo(String name, String desc, Type type, boolean isExpend) {
this.name = name;
this.desc = desc;
this.type = type;
this.isExpend = isExpend;
} public PurchasedVipInfo(String name, String desc, Type type, boolean isExpend,String price) {
this.name = name;
this.desc = desc;
this.type = type;
this.isExpend = isExpend;
this.price = price;
} public PurchasedVipInfo(String name, String desc, boolean isExpend) {
this.name = name;
this.desc = desc;
this.isExpend = isExpend;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
} public Type getType() {
return type;
} public void setType(Type type) {
this.type = type;
} public boolean isChecked() {
return isChecked;
} public void setIsChecked(boolean isChecked) {
this.isChecked = isChecked;
} public boolean isExpend() {
return isExpend;
} public void setIsExpend(boolean isExpend) {
this.isExpend = isExpend;
} public String getPrice() {
return price;
} public void setPrice(String price) {
this.price = price;
}
}
package com.example.yunkanglast;

import android.app.Activity;
import android.content.Context; import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ListView; import java.util.ArrayList;
import java.util.List; public class RegistrationPurchasedVipActivity extends Activity { private ListView purchasedVipInfolistView;
private List<PurchasedVipInfo> purchasedVipInfolist;
private RegistrationPurchasedVipAdapter pVipAdapter; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration_purchased_vip);
purchasedVipInfolistView = (ListView) findViewById(R.id.lv_register_healthvip_list);
purchasedVipInfolistView.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return true;
}
});
initData();
} private void initData() {
purchasedVipInfolist = new ArrayList<PurchasedVipInfo>();
for (int i = 1; i < 5; i++) {
PurchasedVipInfo.Type type = PurchasedVipInfo.Type.TEXT_VIEW;
if (i == 0) {
type = PurchasedVipInfo.Type.NO_CONTENT;
} else if (i > 0 && i < 3) {
type = PurchasedVipInfo.Type.CHECK_BOX;
} else if (i == 3) {
type = PurchasedVipInfo.Type.NO_CONTENT_JUMP;
} else if (i == 4) {
type = PurchasedVipInfo.Type.TEXT_VIEW_HEAD;
}
}
purchasedVipInfolist
.add(new PurchasedVipInfo(
"预约挂号服务 ",
"客户可通过400热线、网站、手机客户端等多个渠道提供全国500多家医院的免费预约挂号服务。服务不限次数,部分医院限制同一就诊人每月不超过6次,以医院要求为准。 ",
PurchasedVipInfo.Type.TEXT_VIEW, false));
purchasedVipInfolist
.add(new PurchasedVipInfo(
"会员专享服务",
"客户可通过400热线、网站、手机客户端等多个渠道提供全国500多家医院的免费预约挂号服务。服务不限次数,部分医院限制同一就诊人每月不超过6次,以医院要求为准。 ",
PurchasedVipInfo.Type.TEXT_VIEW, false));
purchasedVipInfolist
.add(new PurchasedVipInfo(
"医生质询/导诊 ",
"客户可通过400热线、网站、手机客户端等多个渠道提供全国500多家医院的免费预约挂号服务。服务不限次数,部分医院限制同一就诊人每月不超过6次,以医院要求为准。 ",
PurchasedVipInfo.Type.TEXT_VIEW, false));
purchasedVipInfolist
.add(new PurchasedVipInfo(
"放号提醒 ",
"客户可通过400热线、网站、手机客户端等多个渠道提供全国500多家医院的免费预约挂号服务。服务不限次数,部分医院限制同一就诊人每月不超过6次,以医院要求为准。 ",
PurchasedVipInfo.Type.TEXT_VIEW, false));
pVipAdapter = new RegistrationPurchasedVipAdapter(RegistrationPurchasedVipActivity.this,
purchasedVipInfolist);
purchasedVipInfolistView.setAdapter(pVipAdapter); }
}
package com.example.yunkanglast;

import java.util.List;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; public class RegistrationPurchasedVipAdapter extends BaseAdapter { private Context context;
private List<PurchasedVipInfo> purchasedVipInfolist;
private LayoutInflater inflater; public RegistrationPurchasedVipAdapter(Context context,
List<PurchasedVipInfo> purchasedVipInfolist) {
this.context = context;
this.purchasedVipInfolist = purchasedVipInfolist;
this.inflater = LayoutInflater.from(context);
} @Override
public int getCount() {
return purchasedVipInfolist.size();
} @Override
public Object getItem(int position) {
return purchasedVipInfolist.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
final PurchasedVipInfo node = purchasedVipInfolist.get(position);
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.registration_purchased_vip_listview, null);
holder.mTvDesc = (TextView) convertView
.findViewById(R.id.tv_register_healthvip_lists);
holder.mIvIcon = (ImageView) convertView
.findViewById(R.id.iv_register_healthvip_icon);
holder.mTvName = (TextView) convertView
.findViewById(R.id.tv_register_healthvip_listhead);
holder.mHead = convertView
.findViewById(R.id.linear_register_healthvip_list);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (node != null) {
PurchasedVipInfo.Type type = node.getType();
if (type == PurchasedVipInfo.Type.NO_CONTENT) {
holder.mHead.setVisibility(View.GONE);
holder.mTvDesc.setVisibility(View.GONE);
} else if (type == PurchasedVipInfo.Type.TEXT_VIEW) { holder.mTvName.setText(node.getName());
holder.mTvDesc.setText(node.getDesc()); holder.mHead.setVisibility(View.VISIBLE);
holder.mIvIcon.setBackgroundColor(node.isExpend() ? Color.GREEN
: Color.RED);
holder.mTvDesc.setVisibility(node.isExpend() ? View.VISIBLE
: View.GONE);
holder.mHead.setOnClickListener(new OnpVipClickListener(holder,
position)); } else if (type == PurchasedVipInfo.Type.CHECK_BOX) { holder.mTvName.setText(node.getName());
holder.mTvDesc.setText(node.getDesc()); holder.mHead.setVisibility(View.GONE);
holder.mIvIcon.setBackgroundColor(node.isExpend() ? Color.GREEN
: Color.RED);
holder.mTvDesc.setVisibility(node.isExpend() ? View.VISIBLE
: View.GONE); } else if (type == PurchasedVipInfo.Type.NO_CONTENT_JUMP) {
holder.mTvName.setText(node.getName());
holder.mTvDesc.setText(node.getDesc()); holder.mHead.setVisibility(View.VISIBLE);
holder.mIvIcon.setBackgroundColor(node.isExpend() ? Color.GREEN
: Color.RED);
holder.mTvDesc.setVisibility(node.isExpend() ? View.VISIBLE
: View.GONE);
holder.mHead.setOnClickListener(new OnpVipClickListener(holder,
position));
} else if (type == PurchasedVipInfo.Type.TEXT_VIEW_HEAD) {
holder.mHead.setVisibility(View.GONE);
}
}
return convertView;
} public class ViewHolder {
View mHead; // listview item部分的布局
TextView mTvName; // item 文字
TextView mTvDesc; // item 被隐藏的文字
ImageView mIvIcon; // item上面的指向图标
} public class OnpVipClickListener implements View.OnClickListener { private ViewHolder holder;
private int position; public OnpVipClickListener(ViewHolder holder, int position) {
this.holder = holder;
this.position = position;
} @Override
public void onClick(View v) {
PurchasedVipInfo node = purchasedVipInfolist.get(position);
if (node.isExpend()) {
holder.mTvDesc.setVisibility(View.GONE);
holder.mIvIcon.setImageResource(R.drawable.registration_icon_toright);
} else {
holder.mTvDesc.setVisibility(View.VISIBLE);
holder.mIvIcon.setImageResource(R.drawable.registration_icon_totop);
}
node.setIsExpend(!node.isExpend());
}
}
}

xml

<!--activity_registration_purchased_vip.xml-->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ececec"
android:orientation="vertical" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical" > <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:paddingBottom="25dp"
android:paddingLeft="28dp"
android:paddingRight="20dp"
android:paddingTop="34dp" > <TextView
android:id="@+id/tv_register_healthvip_utitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="尊敬的用户 "
android:textColor="#333333"
android:textSize="14sp" /> <TextView
android:id="@+id/tv_register_healthvip_uname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_register_healthvip_utitle"
android:layout_toRightOf="@+id/tv_register_healthvip_utitle"
android:text="Superman"
android:textColor="#ff5000"
android:textSize="14sp" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_register_healthvip_utitle"
android:layout_toRightOf="@+id/tv_register_healthvip_uname"
android:text=":"
android:textColor="#333333"
android:textSize="14sp" /> <TextView
android:id="@+id/tv_register_healthvip_explain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_register_healthvip_utitle"
android:layout_below="@+id/tv_register_healthvip_utitle"
android:layout_marginTop="16dp"
android:lineSpacingExtra="11dp"
android:text="您已经是小白的健康月费会员,您可以享受小百健康为您提供的覆盖全国的预约挂号服务和专业医生咨询服务,小百努力为您提供高效便捷的就医体验"
android:textColor="#333333"
android:textSize="12sp" /> <TextView
android:id="@+id/tv_register_healthvip_viptimeprompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_register_healthvip_utitle"
android:layout_below="@+id/tv_register_healthvip_explain"
android:layout_marginTop="10dp"
android:text="您的会员使用时间:"
android:textColor="#b1b1b1"
android:textSize="12sp" /> <TextView
android:id="@+id/tv_register_healthvip_viptime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_register_healthvip_viptimeprompt"
android:layout_toRightOf="@+id/tv_register_healthvip_viptimeprompt"
android:text="20151028-20151128"
android:textColor="#b1b1b1"
android:textSize="12sp" />
</RelativeLayout> <View
android:layout_width="fill_parent"
android:layout_height="10dp"
android:background="#eeeeee" /> <ListView
android:id="@+id/lv_register_healthvip_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="#000000"
android:scrollbars="none" />
</LinearLayout> </LinearLayout>
<!--registration_purchased_vip_listview.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:background="#ffffff"
android:orientation="vertical" > <LinearLayout
android:id="@+id/linear_register_healthvip_list"
android:layout_width="fill_parent"
android:layout_height="47dp"
android:orientation="horizontal" > <TextView
android:id="@+id/tv_register_healthvip_listhead"
android:layout_width="wrap_content"
android:layout_height="47dp"
android:layout_marginLeft="27dp"
android:gravity="center_vertical"
android:textColor="#333333"
android:textSize="13sp" /> <View
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1" /> <ImageView
android:id="@+id/iv_register_healthvip_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="16dp"
android:src="@drawable/registration_icon_toright" />
</LinearLayout>
<!-- listview --> <View
android:layout_width="fill_parent"
android:layout_height="0.5dp"
android:background="#ededed" /> <TextView
android:id="@+id/tv_register_healthvip_lists"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:lineSpacingExtra="10dp"
android:paddingBottom="15dp"
android:paddingLeft="28dp"
android:paddingRight="15dp"
android:textColor="#999999"
android:textSize="12sp"
android:visibility="gone" /> </LinearLayout>

Android 原生listview item伸展收缩效果的更多相关文章

  1. Android 原生listview item伸展收缩效果 (续)

    接上一个原生的listview item的伸展收缩效果. 上一个可能做的有些粗糙,效果也没有这个好,上代码. package com.example.listviewdemo; import java ...

  2. android 修改listview item view 的方法(转)

    android 修改listview item view 的方法   具体的解答办法很简单: 代码如下 : 1.获取需要更新的view int visiblePosition = mListView. ...

  3. Android 自定义ListView Item侧滑删除

    本程序是基于网上开源项目修改而来,具体来源忘了,懒得搜了,如果有不合适的地方,请原作者联系我,我会及时回复和处理的! 该例子程序中主要包含两个ListView,一个是实现侧滑删除,一个是侧滑出菜单,代 ...

  4. android 修改listview item view 的方法

    具体的解答办法很简单: 代码如下 : 1.获取需要更新的view int visiblePosition = mListView.getFirstVisiblePosition(); View vie ...

  5. 【转】Android 实现ListView的滑动删除效果

    http://www.cnblogs.com/weixiao870428/p/3524055.html http://download.csdn.net/download/love_javc_you/ ...

  6. android中listview的item滑动删除效果(已解决listview点击问题)

    领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...

  7. Android中Listview点击item不变颜色以及设置listselector 无效

    Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...

  8. Android 实现ListView不可滚动效果

    希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false); 如果还 ...

  9. Android ListView item项 显示动画

    (1)使用LayoutAnimation 所谓的布局动画,其实就是为ViewGroup添加显示动画效果,主要用过LayoutAnimationController来控制实现.LayoutAnimati ...

随机推荐

  1. foreach 和for语句比较

    1.首先想到循环就是执行效率的问题,参考博客http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html 2. 测试时候发现出现“   ...

  2. (原)css 响应式媒体查询 模板

    @media only screen and (max-width:340px) { html,input{ font-size:80%; } } @media only screen and (ma ...

  3. 2015.01.06 JQuery

    jQuery是一个兼容多浏览器的javascript库.开发出来的JavaScript的脚本包.非侵入性的脚本. 下载地址:http://jquery.com/          (打不开网页需要翻* ...

  4. iOS分类

    ios中的分类其实就是把两个类用两个或多个文件写的,,在平时的开发中我们会发现有的时候我们想要一个类多个什么功能  但是已经定义好的类中没有,,我们又不想更改我们的程序  那么现在的这种情况下我就可以 ...

  5. 【转】Perl Unicode全攻略

    Perl Unicode全攻略 耐心看完本文,相信你今后在unicode处理上不会再有什么问题. 本文内容适用于perl 5.8及其以上版本. perl internal form 在Perl看来, ...

  6. WebApp开发技巧大全 看了就明白了

    [转载]阅读原文 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程 序,运行在高端的移动终端设备).开发者们都 ...

  7. Python成长之路第一篇(2)-初识列表和元组

    可以将列表和元组当成普通的“数组”,他能保存任意数量任意类型的Python对象,和数组一样都是通过数字0索引访问元素,列表和元组可以存储不同类型的对象,列表和元组有几处重要区别.列表元素用([])包括 ...

  8. python threading 模块来实现多线程

    以多线程的方式向标准输出打印日志 #!/usr/bin/python import time import threading class PrintThread(threading.Thread): ...

  9. java reflection总结

    一.java反射常用方法 获取Class的几种方式: Class class1 = String.class;// 该方法最为安全可靠,程序性能更高.         Class class2 = s ...

  10. Jquery操作-(多种实例)--未完

    一.Jquery简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库. jQuery对象 jQuer ...