Android clipPath相当于硬件加速的View

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

我明白,clipPath不是硬件加速,但我正在寻找一种algorithm,使我能够使用硬件加速提供相同的function。

具体而言,我需要创build一个源位图的圆形裁剪区域,并将其呈现到我的canvas上。

Solutions Collecting From Web of "Android clipPath相当于硬件加速的View"

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

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

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

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

在onCreate:

  • 创build一个使用setXfermode的paint(称为bitmapPaint): http : //developer.android.com/reference/android/graphics/Paint.html#setXfermode (android.graphics.Xfermode )
  • 把一个AvoidXfermode ,也是它的弃用,它工作得很好。 通过它的白色和目标模式高公差(如240)

在onLayout:

  • 创build一个与你的视图大小相同的位图
  • 在白色的canvas上绘制你的圈子,用一个干净的边框作为别名

在onDraw中:

  • 在您的油漆canvas上用白色圆圈绘制位图
  • 现在,使用在onCreate中创build的bitmapPaint在绘制canvas内绘制位图

位图应该只在圆内呈现。

如果你的位图没有太大的改变,把它剪切一次到形状为一个新的位图,然后在你的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);