package com.parttime.widget; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.os.Build; import android.util.AttributeSet; import android.view.Gravity; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import com.qingmu.jianzhidaren.R; /** * Created by cjz on 2015/8/15. */ public class CreditView extends LinearLayout{ private Context context; private boolean initExecuted; private int scale; private int imgs; private int[] imgIds; private int innerMargin; private int itemWidth = ViewGroup.LayoutParams.WRAP_CONTENT; private int itemHeight = ViewGroup.LayoutParams.WRAP_CONTENT; public CreditView(Context context) { super(context); if(!initExecuted){ initExecuted = true; init(context, null); } } public CreditView(Context context, AttributeSet attrs) { super(context, attrs); if(!initExecuted){ initExecuted = true; init(context, attrs); } } public CreditView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); if(!initExecuted){ initExecuted = true; init(context, attrs); } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public CreditView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); if(!initExecuted){ initExecuted = true; init(context, attrs); } } private void init(Context context, AttributeSet attrs){ this.context = context; setOrientation(LinearLayout.HORIZONTAL); assignDefaultAttrs(); assignXmlAttrs(attrs); TypedArray typedArray = context.getResources().obtainTypedArray(imgs); int length = typedArray.length(); imgIds = new int[length]; for(int i = 0 ; i < length; ++i){ imgIds[i] = typedArray.getResourceId(i, R.drawable.red_heart); } } private void assignDefaultAttrs(){ innerMargin = context.getResources().getDimensionPixelSize(R.dimen.rank_view_inner_margin_default); imgs = R.array.credit_view_default; scale = 10; } private void assignXmlAttrs(AttributeSet attrs){ if(attrs != null){ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CreditView); if(typedArray != null){ innerMargin = typedArray.getDimensionPixelSize(R.styleable.CreditView_credit_view_innerMargin, innerMargin); itemWidth = typedArray.getDimensionPixelSize(R.styleable.CreditView_credit_view_itemWidth, itemWidth); itemHeight = typedArray.getDimensionPixelSize(R.styleable.CreditView_credit_view_itemHeight, itemHeight); scale = typedArray.getInt(R.styleable.CreditView_credit_view_creditScale, scale); imgs = typedArray.getResourceId(R.styleable.CreditView_credit_view_imgArray, imgs); } } } private ImageView makeIv(){ ImageView iv = new ImageView(context); return iv; } private LinearLayout.LayoutParams makeLayoutParams(){ return makeLayoutParams(0); } private LinearLayout.LayoutParams makeLayoutParams(int marginLeft){ LayoutParams lp = new LayoutParams(itemWidth, itemHeight); lp.gravity = Gravity.CENTER_VERTICAL; lp.leftMargin = marginLeft; return lp; } public void setImages(int[] imgs){ imgIds = imgs; } public void setScale(int scale){ this.scale = scale; } public void credit(int points){ removeAllViews(); int aspect; int n; for(int i = imgIds.length - 1; i >= 0; --i){ aspect = (int) Math.pow(scale, i); if(points >= aspect){ n = points / aspect; points -= (n * aspect); for(int j = 0; j < n; ++j) { ImageView imageView = makeIv(); imageView.setImageResource(imgIds[i]); ViewGroup.LayoutParams lp; if (getChildCount() == 0) { lp = makeLayoutParams(); } else { lp = makeLayoutParams(innerMargin); } addView(imageView, lp); } } } } }