Android自定义View,空指针?

private void drawScale(Canvas canvas)
{
canvas.save();
canvas.translate(getWidth() / 2 ,getHeight() / 2);

    canvas.rotate(-133);
    dialPaint.setColor(Color.parseColor("#3CB7EA"));
    for (int i = 0; i < (temperature - minTemp)* angleRate;i++)
    {
        canvas.drawLine(0,-dialRadius,0,-dialRadius + scaleHeight,dialPaint);
        canvas.rotate(4.5f);
    }

    canvas.rotate(90);
    dialPaint.setColor(Color.parseColor("#E37364"));

    for (int i = 0; i < (temperature - minTemp) * angleRate; i++)
    {
        canvas.drawLine(0, -dialRadius, 0,-dialRadius + scaleHeight,dialPaint);
    }
    canvas.restore();

}

07-12 15:20:16.438 3814-3814/com.huawei.tempcontrolview E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.huawei.tempcontrolview, PID: 3814
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Paint.setColor(int)' on a null object reference
at com.huawei.tempcontrolview.TempControlView.drawScale(TempControlView.java:168)
at com.huawei.tempcontrolview.TempControlView.onDraw(TempControlView.java:151)

8个回答

可能是dialPaint为空?检查下是不是?

log和代码都不全 不好判断 建议 :1、检查dialPaint是否初始化 2、dialPaint.setColor方法中的参数是否有问题

从Log看是dialPaint没有做判空保护导致的空指针异常

很明显是dialPaint没有初始化

就这段代码来看,是 dialPaint 为空了,没有初始化,建议在这段代码中使用 dialPaint 的时候,判断一下是否 null

建议给出我们代码,Paint的初始化代码,最好在构造里完成画笔的初始化。

感觉你 paint 没有初始化

paint没有初始化。
至于为什么会没有初始化,很有可能是因为四个构造函数的套用过程中,将this(context,attrs,0); 写成了super(context,attrs,0);
super()是系统写的,this是自定义的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问