package com.com.mr_wrong.CustomView; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.ImageView; import com.Utils.LogUtils; import com.example.mr_wrong.androidstudioproject.R; /** * Created by Mr_Wrong on 15/6/10. */ public class AddTextImageview extends ImageView { private String mText = ""; private Paint mPaint; private Rect mTextBound; private int mTextSize; private int mTextColor; private int mTextLeft; private int mTextTop; private int mTextGravity; private int mTextWidth; private int mTextHeight; private int mWidth; private int mHeight; private int x; private int y; public AddTextImageview(Context context) { this(context, null); } public AddTextImageview(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AddTextImageview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.AddTextImageview, defStyleAttr, 0); mTextSize = array.getDimensionPixelSize(R.styleable.AddTextImageview_textsize, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics())); mTextLeft = array.getDimensionPixelSize(R.styleable.AddTextImageview_textleft, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics())); mTextTop = array.getDimensionPixelSize(R.styleable.AddTextImageview_texttop, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 0, getResources().getDisplayMetrics())); mTextColor = array.getColor(R.styleable.AddTextImageview_textcolor, Color.BLACK); mText = array.getString(R.styleable.AddTextImageview_text); mTextGravity = array.getInt(R.styleable.AddTextImageview_textgravity, 0); array.recycle(); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setTextSize(mTextSize); mPaint.setColor(mTextColor); mTextBound = new Rect(); mPaint.getTextBounds(mText, 0, mText.length(), mTextBound); mTextWidth = mTextBound.width(); mTextHeight = mTextBound.height(); } public void setTextGravity(int TextGravity) { this.mTextGravity = TextGravity; judegtextgravity(TextGravity); invalidate(); } private void judegtextgravity(int TextGravity) { switch (TextGravity) { case 0: x = getPaddingLeft(); y = (int) -mPaint.ascent(); break; case 1: x = mWidth / 2 - mTextWidth / 2; y = (int) -mPaint.ascent(); break; case 2: x = mWidth - mTextWidth - getPaddingRight(); y = (int) -mPaint.ascent(); break; case 3: x = getPaddingLeft(); y = (int) (mHeight / 2 - (mPaint.descent() + mPaint.ascent()) / 2); break; case 4: x = mWidth / 2 - mTextWidth / 2; y = (int) (mHeight / 2 - (mPaint.descent() + mPaint.ascent()) / 2); break; case 5: x = mWidth - mTextWidth - getPaddingRight(); y = (int) (mHeight / 2 - (mPaint.descent() + mPaint.ascent()) / 2); break; case 6: x = getPaddingLeft(); y =mHeight-mTextHeight-getPaddingBottom(); break; case 7: x = mWidth / 2 - mTextWidth / 2; y =mHeight-mTextHeight-getPaddingBottom(); break; case 8: x = mWidth - mTextWidth - getPaddingRight(); y =mHeight-mTextHeight-getPaddingBottom(); break; } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mWidth = getMeasuredWidth(); mHeight = getMeasuredHeight(); judegtextgravity(mTextGravity); x += mTextLeft; y += mTextTop; LogUtils.e(y); canvas.drawText(mText, x, y, mPaint); } }