Canvas.clipPath()
API 18以降、ハードウェア アクセラレーションのサポートが再導入されました。
この問題を回避する最善の方法はsetLayerType(View.LAYER_TYPE_SOFTWARE, null)
、API 11 から 17 で実行している場合にのみ呼び出すことです。
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;
}
}
いずれにせよ、UnsupportedOperationException は API >= 18 では決してスローされるべきではありません。
サポートされていない描画操作を参照してください