Android 在画布上绘制计算位置错误
我正在尝试使用canvas类创建数独视图。我已经检查了我的计算好几次了,通过计算似乎是正确的。但在矩形和底线之间有一些空间。为什么画布计算位置错误 这是我的密码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 =
@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,解决了我的问题。