【发布时间】:2017-08-12 16:15:07
【问题描述】:
我正在玩一个在画布上绘制和跟踪用户手指的应用程序。看到这个picture,绿色矩形是通过跟踪用户的手指运动来绘制的。我从 android SDK 示例中获取了旧版 FingerPaint 应用程序的大部分代码。它的要点是在画布上绘制路径:
canvas.drawPath (path, paint)
我的第一个挑战是在屏幕变化时正确重绘路径。例如,当手机从垂直旋转到水平时,图像会调整大小,我必须沿着正确的坐标重新绘制路径。我能够使用transform 正确地做到这一点。我使用 path.transform(matrix) 来转换路径的坐标。
我现在的下一个挑战是正确缩放线条的粗细。当我绘制路径时,线的粗细是用 setStrokeWidth 设置的。比如我把粗细设置为12:
paint.setStrokeWidth(12);
我不知道如何在屏幕变化时正确缩放线条的粗细。有人知道怎么做吗?
建议首先将画布和路径保存为位图,然后在新的屏幕尺寸上重新绘制位图。但我不想这样做,因为我想支持撤消/重做操作,用户可以撤消/重做在画布上跟踪的路径。
【问题讨论】:
-
您是否使用自定义
ImageView并覆盖onDraw方法?或者在您的自定义View中自己绘制您的Bitmap? -
我在自己的自定义视图上自己绘制位图
-
使用
Canvas#drawBitmap(Bitmap, Matrix, Paint)可能吗?或者你使用Canvas#scale/Canvas#concat? -
我有自己的自定义视图。在我的自定义视图的
onDraw(canvas)方法中,我做了两件事。首先canvas.drawBitmap(...)画图。其次,canvas.drawPath(path, paint)绘制用户用手指绘制的路径。在屏幕旋转时,onDraw(canvas)被调用以重新绘制我的视图,因为屏幕尺寸已更改。那时,我能够成功转换路径的坐标,以便canvas.drawPath(path, paint)将路径呈现在正确的位置。但我还不知道如何正确缩放路径的厚度。 -
是的,我知道,我的问题是如何缩放位图以适应屏幕旋转后的新尺寸?