java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
- java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed at android.graphics.Canvas.checkValidClipOp(Canvas.java:779) at android.graphics.Canvas.clipRect(Canvas.java:918) at com.alamkanak.weekview.WeekView.drawHeaderRowAndEvents(WeekView.java:957) at com.alamkanak.weekview.WeekView.onDraw(WeekView.java:699) at android.view.View.draw(View.java:20366) at android.view.View.updateDisplayListIfDirty(View.java:19241) at android.view.View.draw(View.java:20094) at android.view.ViewGroup.drawChild(ViewGroup.java:4337) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4116) at android.view.View.draw(View.java:20369) at android.view.View.updateDisplayListIfDirty(View.java:19241) at android.view.View.draw(View.java:20094) at android.view.ViewGroup.drawChild(ViewGroup.java:4337) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4116) at android.view.View.updateDisplayListIfDirty(View.java:19232) at android.view.View.draw(View.java:20094) at android.view.ViewGroup.drawChild(ViewGroup.java:4337) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4116) at android.view.View.updateDisplayListIfDirty(View.java:19232) at android.view.View.draw(View.java:20094) at android.view.ViewGroup.drawChild(ViewGroup.java:4337) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4116) at android.view.View.draw(View.java:20369) at com.android.internal.policy.DecorView.draw(DecorView.java:781) at android.view.View.updateDisplayListIfDirty(View.java:19241) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:690) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:696) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:805) at android.view.ViewRootImpl.draw(ViewRootImpl.java:3515) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3312) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2681) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1633) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7786) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1004) at android.view.Choreographer.doCallbacks(Choreographer.java:816) at android.view.Choreographer.doFrame(Choreographer.java:751) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:990) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6863) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
I am also facing the same issue.
https://stackoverflow.com/questions/50231950/what-is-the-best-alternative-to-canvas-cliprect-with-region-op-replace
change targetSdkVersion 28 to 27 from app level build.gradle
https://github.com/AndroidDeveloperLB/Android-Week-View/ fork of this library, but maintained.
change targetSdkVersion 28 to 27 from app level build.gradle
This helped me solve my problem but it is not a viable solution anymore because google wants all the apps to have a targetSDK >= 28 until August.
After reading some StackOverflow posts I found the solution to this problem without changing target SDK.
The problematic line is canvas.clipRect() when used with Region.Op.Replaced
To fix the error you have to:
- remove
Region.Op.Replacedfrom every canvas.clipRect() - wrap canvas.clipRect() inside
canvas.save()andcanvas.restore()e.g ` canvas.save();
TL;DR Source code