1

I needed to update my application to SDK 28 and errors showed in all activities that call plottings as java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed

All error appoint to follow method:

 @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    this.chart.draw(canvas, chartArea);
}

This app uses org.afree.chart.AFreeChart and the following class is required:

public class GraphView extends View {

private AFreeChart chart;
private RectShape chartArea;
private Handler mHandler;

public GraphView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mHandler = new Handler();
    chartArea = new RectShape();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    chartArea.setWidth(w);
    chartArea.setHeight(h);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    this.chart.draw(canvas, chartArea);
}

public void setChart(AFreeChart chart) {
    this.chart = chart;
}

public void repaint() {
    mHandler.post(new Runnable() {
        public void run() {
            invalidate();
        }
    });
}

}

See below the stack:

Process: com.xyz.app, PID: 17118
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:826)
    at org.afree.chart.AFreeChart.draw(AFreeChart.java:1169)
    at org.afree.chart.AFreeChart.draw(AFreeChart.java:1061)
    at com.xyz.app.tools.GraphView.onDraw(GraphView.java:37)
    at android.view.View.draw(View.java:20207)
    at android.view.View.updateDisplayListIfDirty(View.java:19082)
    at android.view.View.draw(View.java:19935)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19073)
    at android.view.View.draw(View.java:19935)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw(View.java:20210)
    at android.view.View.updateDisplayListIfDirty(View.java:19082)
    at android.view.View.draw(View.java:19935)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19073)
    at android.view.View.draw(View.java:19935)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19073)
    at android.view.View.draw(View.java:19935)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw(View.java:20210)
    at com.android.internal.policy.DecorView.draw(DecorView.java:780)
    at android.view.View.updateDisplayListIfDirty(View.java:19082)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:686)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:692)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:801)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:3311)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3115)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2484)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1460)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
    at android.view.Choreographer.doCallbacks(Choreographer.java:761)
    at android.view.Choreographer.doFrame(Choreographer.java:696)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
    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:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
user1801745
  • 391
  • 2
  • 18
  • [This](https://developer.android.com/reference/android/graphics/Canvas#clipRect(android.graphics.RectF,%20android.graphics.Region.Op)) may explain the reason you are seeing the error. The question is now how to fix it? Where are you getting the code that is causing the error and can you post the stack trace? – Cheticamp May 28 '20 at 14:57
  • stack trace posted – user1801745 May 29 '20 at 16:18
  • [This](https://github.com/johnjohndoe/AFreeChart/blob/johnjohndoe-master/afreechart/src/org/afree/chart/AFreeChart.java#L1169) is the line that is causing you trouble. I assume that this is where you got the library and it hasn't been updated in almost 6 years. You'll need to find an updated version, override the method or update it yourself. [Here](https://stackoverflow.com/a/50247323/6287910) is an approach to the code. – Cheticamp May 29 '20 at 17:17
  • Can you email me your source code if it's okay? – Javad Dehban Jun 04 '20 at 03:52

0 Answers0