Android clipPath等效于硬件加速View

时间:2012-08-15 16:09:21

标签: android

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

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

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

3 个答案:

答案 0 :(得分:1)

如果必须使用clipPath,可以按如下方式关闭硬件加速。

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

您还可以控制应用程序,活动,窗口和视图层之间的硬件加速。详细信息描述了此Hardware Acceleration article on Android Development web site

答案 1 :(得分:0)

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

在onCreate中

在onLayout中

  • 创建与视图大小相同的位图
  • 在其画布上绘制您的圆圈,白色,使用反别名创建一个干净的边框
在onDraw中

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

位图应仅在圆圈内呈现。

答案 2 :(得分: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);