package com.xdroid.animation.sample.interpolate; import java.util.List; import com.xdroid.animation.sample.R; import com.xdroid.animation.sample.view.CursorView; import com.xdroid.animation.sample.view.EaseView; import android.content.Context; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.Interpolator; import android.view.animation.TranslateAnimation; import android.widget.BaseAdapter; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.widget.TextView; /** * Created by cimi on 15/7/7. */ public class EaseAdapter extends BaseAdapter { private Context mContext; private LayoutInflater mInflater; private List<String> mNameList; private List<Interpolator> mInterpolatorList; private long duration; private int selectIndex = -1; public EaseAdapter(Context context, List<String> nameList, List<Interpolator> interpolatorList, long duration) { mContext = context; mInflater = LayoutInflater.from(context); mNameList = nameList; mInterpolatorList = interpolatorList; this.duration = duration; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { mHolder = new ViewHolder(); convertView = mInflater.inflate(R.layout.adapter, null); convertView.setBackgroundColor(Color.WHITE); mHolder.easeName = (TextView) convertView.findViewById(R.id.easeName); mHolder.easeView = (EaseView) convertView.findViewById(R.id.easeView); mHolder.cursor = (CursorView) convertView.findViewById(R.id.cursor); convertView.setTag(mHolder); }else { mHolder = (ViewHolder) convertView.getTag(); } final Interpolator interpolator = mInterpolatorList.get(position); mHolder.easeName.setText(mNameList.get(position)); mHolder.easeView.setDurationAndInterpolator(duration, interpolator); int bottomMargin = mHolder.easeView.blankTB - mHolder.cursor.height / 2; LayoutParams params = (LayoutParams)mHolder.cursor.getLayoutParams(); params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.easeView); params.bottomMargin = bottomMargin; mHolder.cursor.setLayoutParams(params); if (position == selectIndex) { //选定项开始做Ease动画 selectIndex = -1; int toYDelta = mHolder.easeView.height - 2 * mHolder.easeView.blankTB; Animation anim = new TranslateAnimation(0, 0, 0, -toYDelta); anim.setDuration(duration); anim.setInterpolator(interpolator); anim.setFillAfter(true); anim.setFillBefore(true); anim.setStartOffset(300); mHolder.cursor.startAnimation(anim); } else { //非选定项的游标回到原处 Animation anim = new TranslateAnimation(0, 0, 0, 0); anim.setDuration(0); anim.setFillAfter(true); anim.setFillBefore(true); mHolder.cursor.startAnimation(anim); } return convertView; } public void setSelectIndex(int index) { selectIndex = index; notifyDataSetChanged(); } private ViewHolder mHolder = null; private class ViewHolder { public TextView easeName; public EaseView easeView; public CursorView cursor; } @Override public int getCount() { return mInterpolatorList == null ? 0 : mInterpolatorList.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } }