package com.roboo.like.google.views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.TextView; public class VerticalTextView extends TextView { private Rect text_bounds = new Rect(); private Paint mTextPaint; private float mTextSize = 18;// SP; // private int mViewWidth = 48;//DP; public VerticalTextView(Context context) { this(context, null); } public VerticalTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { mTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, mTextSize, getResources().getDisplayMetrics()); // mViewWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, // mViewWidth, getResources().getDisplayMetrics()); mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mTextPaint.setColor(0xFF00DDFF); mTextPaint.setTextSize(mTextSize); // setBackgroundColor(0xFF222222); } private int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { result = text_bounds.height() + getPaddingTop() + getPaddingBottom(); if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize); } } return result; } private int measureHeight(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { result = text_bounds.width() + getPaddingLeft() + getPaddingRight(); if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize); } } return result; } @Override protected void onDraw(Canvas canvas) { canvas.save(); drawText(canvas); canvas.restore(); } private void drawText(Canvas canvas) { char[] chars = getText().toString().toCharArray(); for (int i = 0; i < chars.length; i++) { canvas.drawText(chars[i] + "", getWidth() / 2 - mTextSize / 2, mTextSize * (1 + i), mTextPaint); } } @Override public void setTextColor(int color) { mTextPaint.setColor(color); super.setTextColor(color); } }