package com.roboo.like.google.adapters;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.roboo.like.google.R;
import com.roboo.like.google.models.NewsItem;
public class NewsListAdapter extends BaseAdapter implements StickyHeadersAdapter, SectionIndexer
{
private static final boolean IS_CUSTOM_FAST_SCROLL_LABEL = false;
private Context context;
private LinkedList<NewsItem> mData;
private ImageLoader mImageLoader;
private LayoutInflater mInflater;
/** 用于记录兩條新聞日期不相同时,该比较字符串所在List集合的索引位置,在生成HeaderId时进行获取 */
private LinkedList<Integer> mSectionIndex = new LinkedList<Integer>();
private HashMap<String, Integer> mNewsCountInDay = new HashMap<String, Integer>();
public NewsListAdapter(Context context, LinkedList<NewsItem> data)
{
super();
this.context = context;
this.mData = data;
this.mImageLoader = ImageLoader.getInstance();
mInflater = LayoutInflater.from(context);
if(!mImageLoader.isInited())
{
mImageLoader.init(ImageLoaderConfiguration.createDefault(context));
}
}
public NewsListAdapter(Context context, LinkedList<NewsItem> data, LinkedList<Integer> sectionIndex)
{
super();
this.context = context;
this.mData = data;
this.mImageLoader = ImageLoader.getInstance();
mInflater = LayoutInflater.from(context);
mImageLoader.init(ImageLoaderConfiguration.createDefault(context));
this.mSectionIndex = sectionIndex;
}
public int getCount()
{
return null == mData ? 0 : mData.size();
}
@Override
public Object getItem(int position)
{
return null == mData ? null : mData.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)// TODO
{
NewsItem item = mData.get(position);
if (null != item)
{
if(convertView == null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.list_news_item, null);
}
ImageView imageView = ViewHolder.getView(convertView, R.id.iv_image);
TextView tvTitle = ViewHolder.getView(convertView, R.id.tv_title);
TextView tvSubTitle = ViewHolder.getView(convertView, R.id.tv_sub_title);
tvTitle.setText(item.getTitle());
tvSubTitle.setText(item.getSubTitle());
DisplayImageOptions options = new DisplayImageOptions.Builder().showStubImage(R.drawable.ic_default_image).showImageForEmptyUri(R.drawable.ic_default_image).showImageOnFail(R.drawable.ic_default_image).cacheInMemory().cacheOnDisc().bitmapConfig(Bitmap.Config.RGB_565).build();
mImageLoader.displayImage(item.getSrc(), imageView, options);
// addAnimation(convertView);
}
return convertView;
}
protected void addAnimation(View convertView)
{
// ObjectAnimator translateX = ObjectAnimator.ofFloat(convertView,
// "translationX",screenWidth/3, screenWidth );
// AnimatorSet set = new AnimatorSet();
// set.play(translateX);
// set.setStartDelay(0);
// set.setDuration( 0);
// set.start();
// AnimatorSet set = new AnimatorSet();
// ObjectAnimator translateY = ObjectAnimator.ofFloat(convertView,
// "translationY", 500, 0);
// set.play(translateY);
// set.setStartDelay(100);
// set.setDuration(300);
// set.start();
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
ObjectAnimator scaleX = ObjectAnimator.ofFloat(convertView, "scaleX", 0f, 1f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(convertView, "alpha", 0f, 1f);
AnimatorSet set = new AnimatorSet();
// set.playTogether(new Animator[]{scaleX,scaleY});
ObjectAnimator translateX = ObjectAnimator.ofFloat(convertView, "translationX", screenWidth, 0f);
ObjectAnimator translateY = ObjectAnimator.ofFloat(convertView, "translationY", 500, 0);
set.play(translateX);
set.setStartDelay(100);
set.setDuration(300);
set.start();
}
public long getHeaderId(int position)
{
return mData.get(position).getHeaderId();
}
public View getHeaderView(int position, View convertView, ViewGroup parent)
{
convertView = mInflater.inflate(R.layout.sticky_header_view, parent, false);
TextView textView = (TextView) convertView.findViewById(R.id.tv_text);
TextView tvTodayNewsCount = (TextView) convertView.findViewById(R.id.tv_today_news_count);
String time = mData.get(position).getTime();
int count = null == mNewsCountInDay.get(time) ? 0 : mNewsCountInDay.get(time).intValue();
textView.setText(time);
tvTodayNewsCount.setText("总共 " + count + " 条");
return convertView;
}
@Override
public Object[] getSections()
{
String[] sections = new String[mSectionIndex.size()];
for (int i = 0; i < mSectionIndex.size(); i++)
{
sections[i] = getFastScrollLabel(mData.get(mSectionIndex.get(i)).getTime());
}
return sections;
}
/** 获取快速滑动时显示的文字 */
private String getFastScrollLabel(String time)
{
if (IS_CUSTOM_FAST_SCROLL_LABEL)
{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM月");
String currentMonth = simpleDateFormat.format(new Date(System.currentTimeMillis()));
String newsPublishMonth = null;
String newsPublishDay = null;
if (time.contains("月") && time.contains("日"))
{
newsPublishMonth = time.split("月")[0] + "月";
newsPublishDay = time.split("月")[1].split("日")[0];
}
System.out.println("currentMonth = " + currentMonth + " newsPublishMonth = " + newsPublishMonth);
if (currentMonth.equals(newsPublishMonth))
{
return newsPublishDay;
}
else
{
return newsPublishMonth;
}
}
else
{
return time;
}
}
public int getPositionForSection(int section)
{
if (section >= mSectionIndex.size())
{
section = mSectionIndex.size() - 1;
}
else if (section < 0)
{
section = 0;
}
if(section < mSectionIndex.size() && mSectionIndex.size() > 0)
{
return mSectionIndex.get(section);
}
return 0;
}
public int getSectionForPosition(int position)
{
for (int i = 0; i < mSectionIndex.size(); i++)
{
if (position < mSectionIndex.get(i))
{
return i - 1;
}
}
return mSectionIndex.size() - 1;
}
public void setSectionIndex(LinkedList<Integer> sectionIndex)
{
mSectionIndex = sectionIndex;
String currentNewsTime = mData.get(0).getTime();
int count = 0;
for (int i = 0; i < mData.size(); i++)
{
NewsItem item = mData.get(i);
if (currentNewsTime.equals(item.getTime()))
{
count++;
}
else
{
mNewsCountInDay.put(currentNewsTime, count);
currentNewsTime = item.getTime();
count = 1;
}
}
mNewsCountInDay.put(currentNewsTime, count);// 最后一个日期
}
}