16

我的应用程序中唯一仍然是软件渲染的部分是渲染一个需要绘制圆形位图的视图。我正在使用 clipPath 将需要渲染为圆形的位图剪辑。

我知道 clipPath 不是硬件加速的,但我正在寻找一种算法,允许我使用硬件加速提供等效功能。

具体来说,我需要创建源位图的圆形剪切区域并将其渲染到我的画布上。

4

3 回答 3

1

如果您必须使用 clipPath,您可以关闭硬件加速,如下所示。

<application
    android:label="@string/application_name"
    android:hardwareAccelerated="false">

您还可以控制应用程序、活动、窗口和视图层之间的硬件加速。详细信息在 Android 开发网站上的这篇硬件加速文章中描述。

于 2013-07-10T08:11:53.390 回答
0

如果您的位图没有太大变化,请将其剪裁一次到形状成一个新的位图,然后在您的 onDraw 中绘制剪裁的位图。

这是一个如何从源位图中剪切圆的示例

Bitmap bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Canvas canvas = new Canvas(bitmap);
paint.setColor(Color.RED);
// Draw your shape here
canvas.drawCircle(cx, cy, radius, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));    
canvas.drawBitmap(sourceBitmap, 0, 0, paint);
于 2013-05-11T12:05:12.103 回答
0

你可以试试这个,虽然我不确定它是硬件加速的:

在 onCreate :

在 onLayout :

  • 创建与视图大小相同的位图
  • 在画布上用白色画出你的圆圈,使用反别名作为干净的边框

在 onDraw :

  • 在你的画布上用白色圆圈绘制位图
  • 现在,使用您在 onCreate 中创建的 bitmapPaint 在您的画布中绘制您的位图

位图应仅在圆圈内呈现。

于 2013-05-11T11:50:55.957 回答