Android 在画布上绘制计算位置错误

Android 在画布上绘制计算位置错误,android,canvas,Android,Canvas,我正在尝试使用canvas类创建数独视图。我已经检查了我的计算好几次了,通过计算似乎是正确的。但在矩形和底线之间有一些空间。为什么画布计算位置错误 这是我的密码 @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); this.mCanvasWidth = w; this.mCanvasHeight =

我正在尝试使用canvas类创建数独视图。我已经检查了我的计算好几次了,通过计算似乎是正确的。但在矩形和底线之间有一些空间。为什么画布计算位置错误

这是我的密码

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    this.mCanvasWidth = w;
    this.mCanvasHeight = h;

    Log.i(TAG, "onSizeChanged: Width: " + mCanvasWidth + ", " + "Height: " + mCanvasHeight);

}



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


    float padding = 10;
    float cellWidth = (mCanvasWidth - (4 * mBoldStrokeWidth) - (6 * mThinStrokeWidth) - (padding * 2)) / 9;

    canvas.drawLine(padding, padding + mBoldStrokeWidth / 2, mCanvasWidth - padding * 2, padding + mBoldStrokeWidth / 2, mBoldStrokePaint);
    canvas.drawLine(padding, cellWidth + mBoldStrokeWidth / 2, mCanvasWidth - padding * 2, cellWidth + mBoldStrokeWidth / 2, mBoldStrokePaint);

    RectF rectF = new RectF(padding, padding + mBoldStrokeWidth, cellWidth, cellWidth);
    canvas.drawRect(rectF, mDarkCellPaint);
}
结果


看起来您刚好错过了一行像素。它可以是几件事:
setAntiAlias()
mDarkCellPaint
的笔划设置;事实上,
mBoldStrokeWidth
可能是一个整数,它必须渲染为离散像素,因此您可能会在粗体笔划线的顶部或底部得到一个奇数“行”像素。我已经设置了反别名。我发现我的cellWidth计算返回float,它必须是int,所以我将它转换为整数。这解决了我手机上的问题,但布局设计页面仍然相同。我还将MBoldstrow with type从float更改为int,解决了我的问题。看起来你刚好错过了1行像素。它可以是几件事:
setAntiAlias()
mDarkCellPaint
的笔划设置;事实上,
mBoldStrokeWidth
可能是一个整数,它必须渲染为离散像素,因此您可能会在粗体笔划线的顶部或底部得到一个奇数“行”像素。我已经设置了反别名。我发现我的cellWidth计算返回float,它必须是int,所以我将它转换为整数。这解决了我手机上的问题,但布局设计页面还是一样。我还将MBoldstrope的type从float改为int,解决了我的问题。