package com.yuyh.easyadapter.abslistview; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Paint; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.widget.Checkable; import android.widget.ImageView; import android.widget.TextView; import com.yuyh.easyadapter.helper.ViewHelper; /** * @author yuyh. * @date 2016/7/21. */ public class EasyLVHolder implements ViewHelper.AbsListView<EasyLVHolder> { /** * findViewById后保存View集合 */ private SparseArray<View> mViews = new SparseArray<>(); private SparseArray<View> mConvertViews = new SparseArray<>(); private View mConvertView; protected int mPosition; protected int mLayoutId; protected Context mContext; protected EasyLVHolder(Context context, int position, ViewGroup parent, int layoutId) { this.mConvertView = mConvertViews.get(layoutId); this.mPosition = position; this.mContext = context; this.mLayoutId = layoutId; if (mConvertView == null) { mConvertView = LayoutInflater.from(context).inflate(layoutId, parent, false); mConvertViews.put(layoutId, mConvertView); mConvertView.setTag(this); } } protected EasyLVHolder() { } public <BVH extends EasyLVHolder> BVH get(Context context, int position, View convertView, ViewGroup parent, int layoutId) { if (convertView == null) { return (BVH) new EasyLVHolder(context, position, parent, layoutId); } else { EasyLVHolder holder = (EasyLVHolder) convertView.getTag(); if (holder.mLayoutId != layoutId) { return (BVH) new EasyLVHolder(context, position, parent, layoutId); } holder.setPosition(position); return (BVH) holder; } } /** * 获取item布局 * @return */ public View getConvertView() { return mConvertViews.valueAt(0); } public View getConvertView(int layoutId) { return mConvertViews.get(layoutId); } public <V extends View> V getView(int viewId) { View view = mViews.get(viewId); if (view == null) { view = mConvertView.findViewById(viewId); mViews.put(viewId, view); } return (V) view; } public void setPosition(int mPosition) { this.mPosition = mPosition; } public int getLayoutId() { return mLayoutId; } @Override public EasyLVHolder setText(int viewId, String value) { TextView view = getView(viewId); view.setText(value); return this; } @Override public EasyLVHolder setTextColor(int viewId, int color) { TextView view = getView(viewId); view.setTextColor(color); return this; } @Override public EasyLVHolder setTextColorRes(int viewId, int colorRes) { TextView view = getView(viewId); view.setTextColor(mContext.getResources().getColor(colorRes, null)); return this; } @Override public EasyLVHolder setImageResource(int viewId, int imgResId) { ImageView view = getView(viewId); view.setImageResource(imgResId); return this; } @Override public EasyLVHolder setBackgroundColor(int viewId, int color) { View view = getView(viewId); view.setBackgroundColor(color); return this; } @Override public EasyLVHolder setBackgroundColorRes(int viewId, int colorRes) { View view = getView(viewId); view.setBackgroundResource(colorRes); return this; } @Override public EasyLVHolder setImageDrawable(int viewId, Drawable drawable) { ImageView view = getView(viewId); view.setImageDrawable(drawable); return this; } @Override public EasyLVHolder setImageDrawableRes(int viewId, int drawableRes) { Drawable drawable = mContext.getResources().getDrawable(drawableRes, null); return setImageDrawable(viewId, drawable); } @Override public EasyLVHolder setImageUrl(int viewId, String imgUrl) { // TODO: Use Glide/Picasso/ImageLoader/Fresco return this; } @Override public EasyLVHolder setImageBitmap(int viewId, Bitmap imgBitmap) { ImageView view = getView(viewId); view.setImageBitmap(imgBitmap); return this; } @Override public EasyLVHolder setVisible(int viewId, boolean visible) { View view = getView(viewId); view.setVisibility(visible ? View.VISIBLE : View.GONE); return this; } @Override public EasyLVHolder setVisible(int viewId, int visible) { View view = getView(viewId); view.setVisibility(visible); return this; } @Override public EasyLVHolder setTag(int viewId, Object tag) { View view = getView(viewId); view.setTag(tag); return this; } @Override public EasyLVHolder setTag(int viewId, int key, Object tag) { View view = getView(viewId); view.setTag(key, tag); return this; } @Override public EasyLVHolder setChecked(int viewId, boolean checked) { Checkable view = getView(viewId); view.setChecked(checked); return this; } @Override public EasyLVHolder setAlpha(int viewId, float value) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getView(viewId).setAlpha(value); } else { AlphaAnimation alpha = new AlphaAnimation(value, value); alpha.setDuration(0); alpha.setFillAfter(true); getView(viewId).startAnimation(alpha); } return this; } @Override public EasyLVHolder setTypeface(int viewId, Typeface typeface) { TextView view = getView(viewId); view.setTypeface(typeface); view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); return this; } @Override public EasyLVHolder setTypeface(Typeface typeface, int... viewIds) { for (int viewId : viewIds) { TextView view = getView(viewId); view.setTypeface(typeface); view.setPaintFlags(view.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG); } return this; } @Override public EasyLVHolder setOnClickListener(int viewId, View.OnClickListener listener) { View view = getView(viewId); view.setOnClickListener(listener); return this; } }