【问题标题】:Android clipPath equivalent for hardware accelerated ViewAndroid clipPath 等效于硬件加速视图
【发布时间】:2012-08-15 16:09:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      在 onCreate 中:

      在 onLayout 中:

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

      在 onDraw 中:

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

      位图应仅在圆圈内呈现。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-29
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-30
          相关资源
          最近更新 更多