不管有无设置宽度和高度都会崩溃

不管有无设置宽度和高度都会崩溃

 public class test_text extends View {
private String mText = "111",mNumber = "222";
private Paint mPaint;
private Rect mNumberRect;
public test_text(Context context) {
    super(context);
}

public test_text(Context context, AttributeSet attrs) {
    super(context,attrs);
}

public test_text(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context,attrs,defStyleAttr);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    mPaint = new Paint();
    mPaint.setColor(Color.BLACK);
    mPaint.setStyle(Paint.Style.STROKE);
    canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
    canvas.drawCircle(getWidth()/6*4, getHeight()/4*3,getHeight()/4,mPaint);
    mPaint.setTextSize(18);
    mPaint.getTextBounds(mNumber, 0, mNumber.length(), mNumberRect);
    canvas.drawText(mText, 2 ,getHeight()/5,mPaint);
    canvas.drawText(mNumber, (getWidth()/6*4)-(mNumberRect.width()/2), (getHeight()/4*3)-(mNumberRect.hashCode()/2), mPaint);
}
}

图片说明

图片说明

图片说明

你这个对象mNumberRect是null的,肯定会蹦啊,new 出来就不会崩了

android:layout_width="wrap_content"看看
检查你的xml的第10行,你的图没有行号,也没法看出是不是这个文件

把错误写到logcat这样看比较直观点,你这样贴出来,还要排查

布局文件第十行,加上layout_width

自定义的testtext 在代码中构造里面未设置宽高,而调用的super里没并不会对其设置宽高。
写在xml文件中也未明确宽高
因此代码一调用后,直接发现这个view是没有宽高,而且这时候只执行到构造类里,并未调用onDraw中的方法

自定义的testtext 在代码中构造里面未设置宽高,而调用的super里没并不会对其设置宽高。
写在xml文件中也未明确宽高

你的XMl不居中的第十行有问题,缺少layout_width属性,自己添加上试试

将构造函数换成如下代码试试

public test_text(Context context) {
this(context,null);
}

public test_text(Context context, AttributeSet attrs) {
this(context,attrs,0);
}

public test_text(Context context, AttributeSet attrs, int defStyleAttr) {
super(context,attrs,defStyleAttr);
}