【发布时间】:2012-08-15 16:09:21
【问题描述】:
我的应用程序中唯一仍然是软件渲染的部分是渲染一个需要绘制圆形位图的视图。我正在使用 clipPath 将需要渲染的位图裁剪为圆形。
我了解 clipPath 不是硬件加速的,但我正在寻找一种算法,让我能够使用硬件加速提供等效功能。
具体来说,我需要创建源位图的圆形剪切区域并将其渲染到我的画布上。
【问题讨论】:
标签: android
我的应用程序中唯一仍然是软件渲染的部分是渲染一个需要绘制圆形位图的视图。我正在使用 clipPath 将需要渲染的位图裁剪为圆形。
我了解 clipPath 不是硬件加速的,但我正在寻找一种算法,让我能够使用硬件加速提供等效功能。
具体来说,我需要创建源位图的圆形剪切区域并将其渲染到我的画布上。
【问题讨论】:
标签: android
如果您必须使用 clipPath,您可以关闭硬件加速,如下所示。
<application
android:label="@string/application_name"
android:hardwareAccelerated="false">
您还可以控制应用程序、活动、窗口和视图层之间的硬件加速。有关此Hardware Acceleration article on Android Development web site 的详细信息描述。
【讨论】:
你可以试试这个,虽然我不确定它是硬件加速的:
在 onCreate 中:
在 onLayout 中:
在 onDraw 中:
位图应仅在圆圈内呈现。
【讨论】:
如果你的位图没有太大变化,将它剪裁一次到形状成一个新的位图,然后在你的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);
【讨论】: