package com.xjf.repository.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.TextPaint;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import com.xjf.repository.R;
/**
* @类名 : CustomImageView
* @描述 :
* @时间 : 2016/4/12 9:13
* @作者: 李东
* @邮箱 : lidong@chni.com.cn
* @company: chni
*/
public class CustomImageView extends View {
private String TAG = CustomImageView.class.getSimpleName();
/**
* 文本
*/
private String mTitleText;
/**
* 文本的颜色
*/
private int mTitleTextColor;
/**
* 文本的大小
*/
private int mTitleTextSize;
/**
* 图片
*/
private Bitmap mImage;
/**
*
*/
private int mImageScaleType;
/**
* 画笔
*/
private Paint mPaint;
/**
* 控制整体布局
*/
private Rect mRect;
/**
* 文字的区域
*/
private Rect mTextBound;
/**
* 宽度
*/
private int mWidth;
/**
* 高度
*/
private int mHeight;
private static final int IMAGE_SCALE_FITXY = 1;
public CustomImageView(Context context) {
this(context, null);
}
public CustomImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
/**
* @param context
* @param attrs
* @param defStyleAttr
*/
public CustomImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
/**
* 获取自定义属性
*/
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomerImageView, defStyleAttr, 0);
int indexCount = a.getIndexCount();
for (int i = 0; i < indexCount; i++) {
//获取数组中的自定义值
int attr = a.getIndex(i);
if (attr == R.styleable.CustomerImageView_titleText2) {
mTitleText = a.getString(attr);
}
if (attr == R.styleable.CustomerImageView_titleTextColor2) {
mTitleTextColor = a.getInt(attr, Color.BLACK);
}
if (attr == R.styleable.CustomerImageView_titleTextSize2) {
mTitleTextSize = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
16, getResources().getDisplayMetrics()));
}
if (attr == R.styleable.CustomerImageView_image2) {
mImage = BitmapFactory.decodeResource(getResources(), a.getResourceId(attr, 0));
}
if (attr == R.styleable.CustomerImageView_imageScaleType2) {
mImageScaleType = a.getInt(attr, 0);
}
}
a.recycle();
//初始化画笔和矩形区域
mPaint = new Paint();
mPaint.setTextSize(mTitleTextSize);
mPaint.setAntiAlias(true);
mRect = new Rect();
mTextBound = new Rect();
//计算描绘文字的范围
mPaint.getTextBounds(mTitleText, 0, mTitleText.length(), mRect);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// super.onMeasure(widthMeasureSpec, heightMeasureSpec);
/**
* 测量的模式
*/
int mode = MeasureSpec.getMode(widthMeasureSpec);
int size = MeasureSpec.getSize(widthMeasureSpec);
if (mode == MeasureSpec.EXACTLY) {//march_parent,
mWidth = size;
Log.d(TAG, "onMeasure()" + "EXACTLY ");
} else {
// 由图片决定的宽
int desireByImg = getPaddingLeft() + getPaddingRight() + mImage.getWidth();
// 由字体决定的宽
int desireByTitle = getPaddingLeft() + getPaddingRight() + mTextBound.width();
if (mode == MeasureSpec.AT_MOST) {//wrap_context
Log.d(TAG, "onMeasure()" + "AT_MOST ");
int desire = Math.max(desireByImg, desireByTitle);
mWidth = Math.min(size, desire);
}
}
int height_size = MeasureSpec.getSize(heightMeasureSpec);
int height_mode = MeasureSpec.getMode(heightMeasureSpec);
if (height_mode == MeasureSpec.EXACTLY) {
mHeight = height_size;
Log.d(TAG, "onMeasure()" + "EXACTLY ");
} else {
//由图片决定的高度
int desreByImge = getPaddingTop() + getPaddingBottom() + mImage.getHeight();
//由文字决定高度
int desreByText = getPaddingTop() + getPaddingBottom() + mTextBound.width();
if (height_mode == MeasureSpec.AT_MOST) {
int max = Math.max(desreByImge, desreByText);
mHeight = Math.min(max, height_size);
}
}
setMeasuredDimension(mWidth, mHeight);
}
@Override
protected void onDraw(Canvas canvas) {
// super.onDraw(canvas);
//先绘制边框
mPaint.setStrokeWidth(4);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.RED);
canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint);
mRect.top = getPaddingTop();
mRect.left = getPaddingLeft();
mRect.bottom = mHeight - getPaddingBottom();
mRect.right = mWidth - getPaddingRight();
//绘制文字
mPaint.setColor(mTitleTextColor);
mPaint.setStyle(Paint.Style.FILL);
/**
* 当前设置的宽度小于字体需要的宽度,将字体改为xxx...
*/
if (mTextBound.width() > mWidth) {
TextPaint paint = new TextPaint(mPaint);
String msg = TextUtils.ellipsize(mTitleText, paint, (float) mWidth - getPaddingLeft() - getPaddingRight(),
TextUtils.TruncateAt.END).toString();
canvas.drawText(msg, getPaddingLeft(), mHeight - getPaddingBottom(), mPaint);
} else {
//正常情况,将字体居中
canvas.drawText(mTitleText, (mWidth - mTextBound.width() * 1.0f / 2), mHeight - getPaddingBottom(), mPaint);
}
//取消使用掉的块
mRect.bottom -= mTextBound.height();
//绘制图片
if (mImageScaleType == IMAGE_SCALE_FITXY) {//如果是拉伸
canvas.drawBitmap(mImage, null, mRect, mPaint);
} else {
//计算居中的矩形范围
mRect.top = (mHeight - mTextBound.height()) / 2 - mImage.getHeight() / 2;
mRect.left = (mWidth - mImage.getWidth()) / 2;
mRect.right = mWidth / 2 + mImage.getWidth() / 2;
mRect.bottom = (mHeight - mTextBound.height()) / 2 + mImage.getHeight() / 2;
canvas.drawBitmap(mImage, null, mRect, mPaint);
}
}
}