package cn.sinata.xldutils.view; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.os.Build; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; import cn.sinata.xldutils.R; /** * 加减view,购物车等处使用,简单的组合按钮而已 */ public class AddSubView extends LinearLayout implements View.OnClickListener{ private ImageButton addView;//加 private ImageButton subView;//减 private TextView numView;//显示数字view private int step = 1;//步长,默认为1 private int min = 0;//最小值,默认为1 private int max = 99;//最大值,默认为99 private int number = 0; private float textSize = 14; private int textColor = Color.parseColor("#333333"); public AddSubView(Context context) { super(context); init(context,null); } public AddSubView(Context context, AttributeSet attrs) { super(context, attrs); init(context,attrs); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) public AddSubView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context,attrs); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public AddSubView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context,attrs); } private void init(Context context, AttributeSet attrs){ addView = new ImageButton(context); subView = new ImageButton(context); numView = new TextView(context); int itemWidth = 30; int itemHeight = 30; int subBg = 0; int addBg = 0; int subSrc = 0; int addSrc = 0; if(attrs != null) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AddSubView); itemWidth= a.getDimensionPixelSize(R.styleable.AddSubView_itemWidth, itemWidth); itemHeight= a.getDimensionPixelSize(R.styleable.AddSubView_itemHeight, itemHeight); max= a.getInt(R.styleable.AddSubView_max, max); min= a.getInt(R.styleable.AddSubView_min, min); subBg = a.getResourceId(R.styleable.AddSubView_subBackground, 0); subSrc = a.getResourceId(R.styleable.AddSubView_subSrc, 0); addBg = a.getResourceId(R.styleable.AddSubView_addBackground, 0); addSrc = a.getResourceId(R.styleable.AddSubView_addSrc, 0); a.recycle(); }else { float density = context.getResources().getDisplayMetrics().density; itemWidth = (int) (itemWidth*density); itemHeight = (int) (itemHeight*density); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemWidth,itemHeight); subView.setLayoutParams(params); if (subSrc >0){ subView.setImageResource(subSrc); } if (subBg>0){ subView.setBackgroundResource(subBg); } if (addBg>0){ addView.setBackgroundResource(addBg); } if (addSrc >0){ addView.setImageResource(addSrc); } addView.setLayoutParams(params); numView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,itemHeight)); numView.setMinWidth(itemWidth); numView.setText(String.valueOf(min)); if (min<0){ min = 0; } number = min; numView.setTextSize(TypedValue.COMPLEX_UNIT_SP,textSize); numView.setTextColor(textColor); numView.setGravity(Gravity.CENTER); addView(subView); addView(numView); addView(addView); if (number <= 0){ subView.setEnabled(false); }else { subView.setEnabled(true); } subView.setOnClickListener(this); addView.setOnClickListener(this); } public void setMaxNumber(int max){ this.max = max; if (number>=max){ number = max; addView.setEnabled(false); }else { addView.setEnabled(true); } } public void setMinNumber(int min){ this.min = min; if (number<=min){ number = min; subView.setEnabled(false); }else { subView.setEnabled(true); } } public void setNumber(int number){ this.number = number; numView.setText(String.valueOf(number)); if (number>=max){ this.number = max; addView.setEnabled(false); }else { addView.setEnabled(true); } if (number<=min){ this.number = min; subView.setEnabled(false); }else { subView.setEnabled(true); } } public int getNumber(){ return number; } public void setOnNumberChangeListener(OnNumberChangeListener listener){ this.listener = listener; } public interface OnNumberChangeListener{ void onNumberChange(Type type, int num); } public enum Type{ ADD,SUB } private OnNumberChangeListener listener; @Override public void onClick(View v) { if (v == subView){ if (number>min) { number -= step; if (listener != null) { listener.onNumberChange(Type.SUB,number); } } }else if (v == addView){ if (number=max){ number = max; addView.setEnabled(false); }else { addView.setEnabled(true); } numView.setText(String.valueOf(number)); } }