首頁>Program>source

从android 3.0開始, clipPath ()方法在打開了硬體加速功能的設備中不再受支援。(請阅讀此技術< / a>,基本上是面具。

最新回復
  • 5月前
    1 #

    Canvas.clipPath()API 18以来,已重新引入了對硬體加速的支援

    解決此問题的最佳方法是致電 setLayerType(View.LAYER_TYPE_SOFTWARE, null) 仅当您在11到17的API上執行時:

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2
            && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        setLayerType(LAYER_TYPE_SOFTWARE, null);
    }
    

    我也包圍了 clipPath() 呼叫try-catch塊以避免意外的應用崩潰:

    if (doClip) {
        try {
            canvas.clipPath(clipPath);
        } catch (UnsupportedOperationException e) {
            Log.e(TAG, "clipPath() not supported");
            doClip = false;
        }
    }
    

    無論如何,永远不要在API>= 18上丟擲UnsupportedOperationException。

    請參阅不受支援的圖形操作

  • 5月前
    2 #

    clipPath 只有18級及更高版本的API才支援硬體加速功能,而11至17級的API級別則需要將其關闭。

    您提到的文章包含一个線索:

    If your application is affected by any of these missing features or limitations, you can turn off hardware acceleration for just the affected portion of your application by calling setLayerType(View.LAYER_TYPE_SOFTWARE, null). This way, you can still take advantage of hardware acceleratin everywhere else. See Controlling Hardware Acceleration for more information on how to enable and disable hardware acceleration at different levels in your application.

    這裏的主要思想是在需要在API級別低於18的設備上使用不受支援的方法的應用程式部分中禁用硬體加速。您可以针對特定视圖執行此操作,而無需轉向 在整个應用程式中完全消失。

    如果您不想關闭硬體加速,那麼我建議您使用Porter-Duff模式.您可以建立一个帶有圆圈的位圖,然後使用一種將圖像剪切到原始內容的模式將圖像绘製到画佈上。

相似問題

  • ios:从情节提要中获取自定義原型單元格的高度?
  • java:如何使用可變引數和反射