package com.quinn.githubknife.ui.widget; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; import android.view.View; import com.quinn.githubknife.R; import com.quinn.githubknife.utils.L; import com.quinn.githubknife.utils.UIUtils; /** * Created by Quinn on 9/21/15. * * 一个绘制KEY-VALUE的组件,上方绘制VAUE,下方绘制NAME */ public class UserLabel extends View{ private final static String TAG = UserLabel.class.getSimpleName(); //两个画笔 private Paint namePaint; private Paint valuePaint; private Rect nameRect; private Rect valueRect; private String label_name; private String label_value; public UserLabel(Context context) { this(context, null); } public UserLabel(Context context, AttributeSet attrs) { this(context, attrs, 0); } public UserLabel(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //Init attr TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.user_verical_label); label_name = a.getString(R.styleable.user_verical_label_name); label_value = a.getString(R.styleable.user_verical_label_value); a.recycle(); nameRect = new Rect(); namePaint = new Paint(); namePaint.setTextSize(UIUtils.sp2px(this.getContext(), 15)); namePaint.setColor(getResources().getColor(R.color.theme_color)); valueRect = new Rect(); valuePaint = new Paint(); valuePaint.setTextSize(UIUtils.sp2px(this.getContext(), 25)); valuePaint.setColor(getResources().getColor(R.color.color_accent)); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); namePaint.getTextBounds(label_name, 0, label_name.length(), nameRect); valuePaint.getTextBounds(label_value, 0, label_value.length(), valueRect); Paint.FontMetrics nameFontMatrics = namePaint.getFontMetrics(); Paint.FontMetrics valueFontMatrics = valuePaint.getFontMetrics(); float nameHeigth = nameFontMatrics.descent - nameFontMatrics.ascent; float valueHeigth = valueFontMatrics.descent - valueFontMatrics.ascent; float viewWidth = getMeasuredWidth(); float viewHeight = getMeasuredHeight(); float valueX = viewWidth / 2 - valueRect.width() / 2; float nameX = viewWidth / 2 - nameRect.width() / 2; float valueY = viewHeight / 2 ; float nameY = viewHeight / 2 + nameHeigth; canvas.drawText(label_value, valueX, valueY, valuePaint); canvas.drawText(label_name, nameX, nameY, namePaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = measureDimension(200, widthMeasureSpec); int height = measureDimension(200, heightMeasureSpec); setMeasuredDimension(width, height); } public int measureDimension(int defaultSize, int measureSpec){ int result; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if(specMode == MeasureSpec.EXACTLY){ result = specSize; }else{ result = defaultSize; //UNSPECIFIED if(specMode == MeasureSpec.AT_MOST){ result = Math.min(result, specSize); } } return result; } public void setName(String name){ this.label_name = name; invalidate(); } public void setValue(String value){ this.label_value = value; invalidate(); } }