先看预览图,我用Xml把控件摆出来是可以看到的,但是在Adapter中设置值之后就不能显示了
public class TitleTextView extends View {
private String titleText;
private String contetnText;
private float contentTextSize;
private float titleTextSize;
private int contentTextColor;
private int titleTextColor;
private int viewWidth;
private int viewHeight;
private Paint paint;
public TitleTextView(Context context) {
super(context);
}
public TitleTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.titleTextView);
titleText = typedArray.getString(R.styleable.titleTextView_title_text);
contetnText = typedArray.getString(R.styleable.titleTextView_content_text);
titleTextColor = typedArray.getColor(R.styleable.titleTextView_title_textColor, Color.BLACK);
contentTextColor = typedArray.getColor(R.styleable.titleTextView_content_textColor, Color.BLACK);
titleTextSize = typedArray.getDimension(R.styleable.titleTextView_title_textSize, 18);
contentTextSize = typedArray.getDimension(R.styleable.titleTextView_content_textSize, 18);
}
public TitleTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 默认执行,计算view的宽高,在onDraw()之前
*
* @param widthMeasureSpec
* @param heightMeasureSpec
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = measureWidth(widthMeasureSpec);
int height = measureHeight(heightMeasureSpec);
setMeasuredDimension(width, height);
}
private int measureWidth(int measureSpec) {
Paint paint = new Paint();
int result = 0;
Rect rect = new Rect();
int contentTextWidth=0;
int titleTextWidth=0;
if(contetnText==null&&titleText==null){
return 150;
}
if(contetnText!=null){
paint.setTextSize(contentTextSize);
paint.getTextBounds(contetnText, 0, contetnText.length(), rect);
contentTextWidth = rect.width();
}
if (titleText!=null){
paint.setTextSize(titleTextSize);
paint.getTextBounds(titleText, 0, titleText.length(), rect);
titleTextWidth = rect.width();
}
result = result+Math.max(contentTextWidth,titleTextWidth);
int specMode = View.MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
switch (specMode) {
case MeasureSpec.UNSPECIFIED:
result = specSize;
break;
case MeasureSpec.AT_MOST:
result = Math.min(result, specSize);
break;
case MeasureSpec.EXACTLY:
result = specSize;
break;
}
viewWidth = result;
return result;
}
private int measureHeight(int measureSpec) {
Paint paint = new Paint();
int result = getPaddingTop()+getPaddingBottom();
Rect rect = new Rect();
float contentTextHeight=0;
float titleTextHeight=0;
if(contetnText==null&&titleText==null){
return 150;
}
if(contetnText!=null){
paint.setTextSize(contentTextSize);
paint.getTextBounds(contetnText, 0, contetnText.length(), rect);
contentTextHeight = rect.height();
}
if (titleText!=null){
paint.setTextSize(titleTextSize);
paint.getTextBounds(titleText, 0, titleText.length(), rect);
titleTextHeight = rect.height();
}
result = (int) (result + contentTextHeight + titleTextHeight);
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
switch (specMode) {
case MeasureSpec.UNSPECIFIED:
result = specSize;
break;
case MeasureSpec.AT_MOST:
result = Math.min(result, specSize);
break;
case MeasureSpec.EXACTLY:
result = specSize;
break;
}
viewHeight = result;
return result;
}
/**
* 绘制View
*
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint = new Paint();
//获取控件中心点的坐标
int centerWidth = viewWidth / 2;
int centerHeight = viewHeight / 2;
/**
* 绘制标题文字
*/
paint.setTextSize(titleTextSize);
paint.setColor(titleTextColor);
Rect rect = new Rect();
paint.getTextBounds(titleText, 0, titleText.length(), rect);
//测量文字宽度
float titleTextWidth = rect.width();
//测量文字高度
float titleTextHeight = rect.height();
canvas.drawText(titleText, centerWidth - titleTextWidth / 2, centerHeight + titleTextHeight , paint);
//重置画笔
paint.reset();
/**
* 绘制内容文字
*/
paint.setTextSize(contentTextSize);
paint.setColor(contentTextColor);
paint.getTextBounds(contetnText, 0, contetnText.length(), rect);
//测量文字宽度
float contentTextWidth = rect.width();
//测量文字高度
float contentTextHeight = rect.height();
canvas.drawText(contetnText, centerWidth - contentTextWidth / 2, centerHeight -contentTextHeight/4, paint);
}
/**
* 获取内容文本
*
* @return
*/
public synchronized String getContetnText() {
return contetnText;
}
/**
* 获取标题文本
*
* @return
*/
public synchronized String getTitleText() {
return titleText;
}
/**
* 设置标题文本
*
* @param titleText
*/
public synchronized void setTitleText(String titleText) {
this.titleText = titleText;
postInvalidate();
}
/**
* 设置标题文本
*
* @param contetnText
*/
public synchronized void setContetnText(String contetnText) {
this.contetnText = contetnText;
postInvalidate();
}