值为超出范围的Android路径

时间:2012-08-26 20:49:23

标签: android android-canvas

我正在计算函数图并将它们放入android.graphics.Path个对象中,然后使用android.graphics.Canvas.drawPath()绘制它。

除非绝对y值非常高(正面或负面)并且应用程序在某些设备上运行,否则这非常有效。然后,它可能根本不绘制路径。发生这种情况的阈值似乎是随机的和设备特定的。

有谁知道这里可能出现什么问题?

[编辑:仅当目标API级别为14或更高时才会发生这种情况]

编辑: 例如,在View.onDraw(Canvas canvas)方法中查看此代码:

    Paint paint = new Paint();

    Path p1 = new Path();
    paint.setColor(Color.BLUE);
    for(float x = 0; x < getWidth(); x++)
        p1.lineTo(x, x);
    canvas.drawPath(p1, paint);

    Path p2 = new Path();
    paint.setColor(Color.GREEN);
    for(float x = 0; x < getWidth(); x++)
        p2.lineTo(x, x*x);
    canvas.drawPath(p2, paint);

第一条路径应该是从左上角到右下角的一条线;第二条路径应该做同样但具有抛物线的形状(因此,你只能看到它的一部分)。

第一条路径绘制,第二条路径没有,显然是因为y值太高。很高兴知道“太高”意味着什么;)

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。

问题是,从API级别14开始,所有绘图都是硬件加速的does not support all the functionality

正如本文所述,通过以下方式关闭硬件加速很简单:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

您可以在this blog post找到更多信息。