我有一个自定义View子类,允许用户绘制出中文字符。线坐标被保存到浮点数组(x1,y1,x2,y2,x2,y2,x3,y3 ......),其被缩放到单位大小,即所有坐标都是0到1之间的值。这使得稍后在草图上以不同大小的视图动画时更容易。它还有助于比较在同一坐标空间中绘制的内容与另一个动画。坐标垂直翻转,也有助于比较。
这意味着当在View的onDraw方法中绘制线条时,必须在调用drawLines绘制草图之前放大并翻译Canvas。
在办公室的所有设备上(Android~2.3),一切正常显示,模拟器也可以。但是,两位使用三星Galaxy S2手机的用户,他们最近报告升级到Android 4,发现线条看起来像“gappy”,如下所示:
我尝试从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行为是否有变化?
答案 0 :(得分:1)
如果您正在使用硬件加速,请尝试将其关闭以进行绘制的自定义视图(myView.setLayerType(View.LAYER_TYPE_SOFTWARE)。您还可以尝试禁用消除锯齿,看看是否有帮助。
否则我会建议给Path另一个镜头。
答案 1 :(得分:0)
我不知道这是否正确,但以防万一:
canvas.scale(frame.width(), -frame.height());
frame.height()
前面的负面唱歌是什么?
你从中减去什么?