使用硬件加速在ICS中使用Canvas.drawPath()渲染路径

时间:2015-04-20 17:19:04

标签: android drawing hardware-acceleration

在ICS设备上,我尝试使用以下代码绘制两个矩形。

Path p1 = new Path();
p1.moveTo(0, 0);
p1.lineTo(0, 100);
p1.lineTo(100, 100);
p1.lineTo(100, 0);
p1.close;
Path p2 = new Path();
Matrix scaling = new Matrix();
scaling.preScale(2, 2);
p1.transform(scaling, p2);
canvas.drawPath(p1);
canvas.drawPath(p2);

在启用了硬件加速的ICS设备上运行上述代码(默认情况下),绘制p1,而不是p2。

一般来说,发生在我身上的是,只要路径不是手动连线(即通过调用lineTo(),quadTo()等),而是通过复制或转换(即通过调用副本)获得构造函数,transform(矩阵,dest),translate(x,y,dest)等),它不是绘制的。

我发现一个“广为人知”的问题与我的问题类似但不完全相同:https://groups.google.com/forum/#!msg/android-developers/eTxV4KPy1G4/tAe2zUPCjMcJ

因此,任何人都可以告诉我我遇到的问题是什么?在我的情况下,我不得不求助于路径转换,否则代码复杂性将大大增加。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试设置android:layerType ="软件"在视图上的xml中查看是否修复了它。在所有apis上都有一些硬件加速可用的方法。

列表在这里:

http://developer.android.com/guide/topics/graphics/hardware-accel.html

请注意,如果更改图层类型会修复它,则应为较新的API创建单独的布局以获得最佳性能