package com.sandro.example;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* 伸缩可滑动的卡片效果
* @author sandrocheng
*
*/
public class CardActivity extends Activity{
private ListView mListView;
private List<ListEntity> entityList= new ArrayList<ListEntity>();
private SourceListAdapter mAdapter;
private LayoutInflater inflater;
private static final int MSG_ANIM = 1;
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ANIM:
boolean needReset = false;
for (ListEntity entity : entityList) {
if (entity.viewHeight > 0) {
if (entity.startHeight < entity.viewHeight && entity.startHeight > 0) {
if(entity.dy > 2){
entity.dy -= 0.3f;
}
entity.startHeight += entity.dy;
entity.startHeight = entity.startHeight>entity.viewHeight?entity.viewHeight:entity.startHeight;
needReset = true;
}
}else{
needReset = true;
}
}
if(needReset){
mAdapter.notifyDataSetChanged();
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_ANIM), 1);
}
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.card_activity_main);
inflater = LayoutInflater.from(this);
mListView = (ListView) this.findViewById(R.id.res_list);
entityList.add(new ListEntity(R.drawable.img_01,"card 1",30));
entityList.add(new ListEntity(R.drawable.img_02,"card 2",40));
entityList.add(new ListEntity(R.drawable.img_03,"card 3",-1));
mAdapter = new SourceListAdapter();
mListView.setAdapter(mAdapter);
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_ANIM), 3000);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
private class ListItemViewHolder{
private ImageView previewView;
private TextView textView;
}
private class ListEntity{
private int imageId;
private String text;
private int startHeight;
private int viewHeight;
private float dy = 10;
private ListEntity(int imageId,String text,int startHeight){
this.imageId = imageId;
this.text = text;
this.startHeight = startHeight;
}
}
private class SourceListAdapter extends BaseAdapter{
@Override
public int getCount() {
return entityList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListItemViewHolder listItemViewHolder;
ListEntity entity = entityList.get(position);
if (convertView == null){
listItemViewHolder = new ListItemViewHolder();
convertView = (FrameLayout)inflater.inflate(R.layout.res_list_item, null);
listItemViewHolder.previewView = (ImageView)convertView.findViewById(R.id.image_view);
listItemViewHolder.textView = (TextView)convertView.findViewById(R.id.text_view);
convertView.setTag(listItemViewHolder);
}else{
listItemViewHolder = (ListItemViewHolder) convertView.getTag();
}
int h = LayoutParams.FILL_PARENT;
if(entity.startHeight > 0){
h = entity.startHeight;
}
AbsListView.LayoutParams p = new AbsListView.LayoutParams(LayoutParams.FILL_PARENT,h);
convertView.setLayoutParams(p);
listItemViewHolder.previewView.setBackgroundResource(entity.imageId);
listItemViewHolder.textView.setText(entity.text);
entity.viewHeight = listItemViewHolder.previewView.getHeight() + listItemViewHolder.textView.getHeight();
return convertView;
}
}
}