我有一个自定义 View 子类,它允许用户画出一个汉字。线坐标被保存到一个浮点数组 (x1, y1, x2, y2, x2, y2, x3, y3...),它被缩放到单位大小,即所有坐标都是 0 和 1 之间的值。这使得稍后在不同尺寸的视图中对草图进行动画处理时更容易。它还有助于将绘制的内容与同一坐标空间中的另一个动画进行比较。坐标垂直翻转,也有助于进行比较。
这意味着当在 View 的 onDraw 方法中绘制线条时,必须在调用 drawLines 绘制草图之前放大和平移 Canvas。
在办公室的所有设备上(Android ~2.3)一切正常,模拟器也正常。然而,两名使用三星 Galaxy S2 手机的用户都报告称他们最近都升级到了 Android 4,他们发现这些行看起来“有问题”,如下所示:
我尝试从 drawLines 切换到使用 Path 对象,但在这种情况下,用户报告说线条根本没有出现!
这是我配置油漆的方式:
paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(kTCDrawPathWidth);
paint.setStrokeCap(Cap.ROUND);
paint.setStrokeJoin(Join.BEVEL);
paint.setColor(Color.WHITE);
这就是我绘制草图的地方:
RectF frame = getDrawingBounds();
canvas.drawRoundRect(frame, 3, 3, drawAreaFramePaint);
canvas.drawRoundRect(frame, 3, 3, drawAreaFrameBorderPaint);
canvas.save();
canvas.translate(frame.left, frame.top+frame.height());
canvas.scale(frame.width(), -frame.height());
for (TCPath path : paths)
canvas.drawLines(path.getLines(), paint);
if (drawingPath!=null)
canvas.drawLines(drawingPath.getLines(), paint);
canvas.restore();
有什么明显的问题吗?Android 4 中的 Paint/Canvas 行为是否发生了变化?