0

我正在计算函数图并将它们放入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 值太高。很高兴知道“太高”是什么意思;)

4

1 回答 1

1

我找到了解决方案。

问题是,从 API-Level 14 开始,所有绘图都是硬件加速完成的,不支持所有功能

如本文所述,关闭硬件加速很简单:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

您将在此博客文章中找到更多信息。

于 2012-09-03T14:49:37.403 回答