Android 从未在自定义视图组构造函数中初始化绘制实例

Android 从未在自定义视图组构造函数中初始化绘制实例,android,Android,我有一个具有以下构造函数的自定义视图组: public BoxGridLayout(Context context) { super(context, null); } public BoxGridLayout(Context context, AttributeSet attrs) { super(context, attrs, 0); } public BoxGridLayout(Context context, AttributeSet attrs, int defSt

我有一个具有以下构造函数的自定义视图组:

public BoxGridLayout(Context context) {
    super(context, null);
}

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

public BoxGridLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    //Recupero gli attributi che ho creato nel file attrs.xml
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BoxGridLayout, 0, defStyle);

    int strokeWidth = a.getDimensionPixelSize(R.styleable.BoxGridLayout_separatorWidth, 0);
    int strokeColor = a.getColor(R.styleable.BoxGridLayout_separatorColor, Color.WHITE);

    a.recycle();

    mGridPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mGridPaint.setStyle(Paint.Style.STROKE);
    mGridPaint.setColor(strokeColor);
    mGridPaint.setStrokeWidth(strokeWidth);
}
之后,在dispatchDraw()方法中,我需要mGridPaint创建网格:

@Override
protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);

    for (int i = 0; i <= getWidth(); i += (getWidth() / COUNT)) {
        canvas.drawLine(i, 0, i, getHeight(), mGridPaint);
    }
    for (int i = 0; i <= getHeight(); i += (getHeight() / COUNT)) {
        canvas.drawLine(0, i, getWidth(), i, mGridPaint);
    }
}
如何修复此错误?
谢谢

布局充气器调用的构造函数是
public-BoxGridLayout(上下文上下文,AttributeSet-attrs)
。改变

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

或者在构造函数中使用两个参数初始化画师


但是请注意,具有
int defStyle
的构造函数从API级别11开始就可用。您还可以使用一个
public void init()
方法,在该方法中提供三个构造函数的公共初始化

yep抱歉。。我应该解释一下区别。。在前者中,您直接调用超级构造函数,在后者中,您调用重写的构造函数,后者反过来调用超级构造函数
java.lang.NullPointerException: Attempt to read from field 'long android.graphics.Paint.mNativePaint' on a null object reference
        at android.view.GLES20Canvas.drawLines(GLES20Canvas.java:862)
        at android.view.GLES20Canvas.drawLine(GLES20Canvas.java:852)
        at it.liqid.customview.widgets.BoxGridLayout.dispatchDraw(BoxGridLayout.java:94)
        .....
public BoxGridLayout(Context context, AttributeSet attrs) {
    super(context, attrs, 0);
}
public BoxGridLayout(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}