不管有无设置宽度和高度都会崩溃
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);
}