【发布时间】:2015-03-04 13:48:29
【问题描述】:
我正在尝试在 Android 中制作自定义视图。在调用 onDraw() 时,类成员 r 似乎没有被初始化。但是 paint 仍然成功初始化(如果我从构造函数中删除该行,则应用程序强制关闭)。在最后一行,我有画布绘制r1,它成功并绘制了一个蓝色矩形。如果我将r1 替换为r,它就是白色的。
这是我的问题的简化版本。我一直在为在构造函数中初始化的数组成员获取空指针异常。但无论如何,问题似乎都是一样的。为什么它不保持实例化?
public class ColorListView extends View {
Paint paint;
Rect r;
public ColorListView (Context context, AttributeSet attrs){
super(context, attrs);
paint = new Paint();
r = new Rect(0,0,getWidth(),getHeight());
}
protected void onDraw (Canvas canvas){
paint.setColor(Color.BLUE);
Rect r1 = new Rect(0,0,getWidth(),getHeight());
canvas.drawRect(r1, paint); // doesn't work if r is passed to drawRect?
}}
【问题讨论】:
-
您是否 100% 确定这是运行的构造函数,而不是任何其他构造函数?
View有大约 3 个不同的构造函数。 -
您是否在代码中的某处重置 r?
-
如果
onDraw被super(...)调用,那么确实r还没有被初始化,所以onDraw将无法使用它。 -
@EpicPandaForce 这是我正在使用的唯一构造函数,所以...是吗?
-
@SMA 不,您看到的是我遇到此问题时使用的所有代码。