Android 在onDraw上添加TextView时出现NullPointer异常

Android 在onDraw上添加TextView时出现NullPointer异常,android,android-layout,android-custom-view,Android,Android Layout,Android Custom View,我正在尝试在myCustomView类的onDraw方法中添加textview。所以,如果我这样做的话,它不会有任何问题 tv = new TextView(context); tv.setTextSize(14); tv.layout(left, top, right, bottom); tv.setGravity(Gravity.CENTER); tv.setText(text); canvas.save(); canvas.translate(left, top); tv.draw

我正在尝试在myCustomView类的onDraw方法中添加textview。所以,如果我这样做的话,它不会有任何问题

tv = new TextView(context);
tv.setTextSize(14); 
tv.layout(left, top, right, bottom);
tv.setGravity(Gravity.CENTER);  
tv.setText(text);
canvas.save(); 
canvas.translate(left, top);
tv.draw(canvas);
但我不想在onDraw中实例化TextView。因此,如果我在类构造函数外部(onDraw的外部)初始化TextView,那么这段代码确实有效。它给了我以下的错误

java.lang.NullPointerException:尝试读取字段“int” 空对象引用上的android.view.ViewGroup$LayoutParams.width 在android.widget.TextView.checkForRelayout(TextView.java:8447)中 位于android.widget.TextView.setText(TextView.java:5378) 位于android.widget.TextView.setText(TextView.java:5234) 位于android.widget.TextView.setText(TextView.java:5191)


此错误的原因是什么?

为什么要在onDraw中添加TextView?没有充分的理由这样做,它将有可怕的性能,是不需要的。如果要在onDraw中绘制文本,请使用canvas.drawText()。如果要添加文本视图,请在正常位置进行。不要在渲染中这样做,渲染是应用程序中需要尽可能快的一部分。您的onDraw应该尽可能避免创建对象,更不用说创建像视图这样重量级的对象了


另外,尝试添加该视图-您做得不对。您必须将其添加到父视图,然后让该父视图布局。在新视图之后,它不是视图层次结构的一部分,因此不会绘制到屏幕上。您遇到的具体崩溃是因为它尚未添加到视图层次结构中,因此没有布局参数。但不要试图解决这个问题——只是不要在这里添加视图,使用drawText或在其他地方添加视图

谢谢你的建议。我想了解一些旧代码。