package com.banking.xc.utils.ui;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.widget.TextView;
import com.banking.xc.utils.DPIUtil;
import com.banking.xc.utils.Log;
public class CustomTextView extends TextView {
private static final String TAG = "MyTextView";
private String content;
private int width; // 图片宽度
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
width = getWidth();
content = getText().toString();
int margin = DPIUtil.dip2px(10);
Paint contentP = getPaint();
contentP.setColor(Color.argb(255, 0, 0, 0));
contentP.setTextSize(DPIUtil.dip2px(14));
// contentP.setAntiAlias(true);
FontMetrics fm = contentP.getFontMetrics();
float fontHeight = fm.descent - fm.ascent; // 计算字体高度
float x = (width / 2) - DPIUtil.dip2px(1);
float y = fontHeight - DPIUtil.dip2px(1);
float textWidth = 0;
int num = 0;// 记录每行开始的位置
float[] widths = new float[content.length()]; // 记录每个字符的宽度
contentP.getTextWidths(content, widths); // 计算每个字符所占宽度
if (Log.D) {
// Log.d(TAG, " onDraw -->> content.length(): " + content.length());
}
float measureText = contentP.measureText(content);
if (measureText <= width - margin) { // 如果子符宽度只满足一行
contentP.setTextAlign(Align.CENTER);// 只可以画一行时字符居中显示
x = (width / 2) - DPIUtil.dip2px(1);// 重新设置画字的起点
canvas.drawText(content, x, y, contentP);
} else { // 字符宽度满足画两行
contentP.setTextAlign(Align.LEFT);// 可以画两行时字符居左显示
x = 0;// 重新设置画字的起点
int k;
for (int i = 0; i < 2; i++) {
if (num >= widths.length) { //
break;
}
int start = num;
textWidth = 0;
for (k = num; k < widths.length; k++) { // 计算每行可以画几个字符
if (textWidth < width - margin) {
textWidth += widths[k];
num = k;
} else {
break;
}
}
num++;
if (Log.D) {
Log.d(TAG, "onDraw --> ======num :" + num + "," + content.length());
}
canvas.drawText(content.substring(start, num), x, y + i * fontHeight, contentP);
}
}
}
}