Android Crash:only INTERSECT and DIFFERENCE are allowed
程序员文章站
2024-03-26 12:58:53
...
Crash信息:
android 9.0 api28
Process: com.liuan.freereader, PID: 30232
java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
at android.graphics.Canvas.checkValidClipOp(Canvas.java:779)
at android.graphics.Canvas.clipPath(Canvas.java:1007)
at com.justwayward.reader.view.readview.PageWidget.drawCurrentPageArea(PageWidget.java:217)
at com.justwayward.reader.view.readview.BaseReadView.onDraw(BaseReadView.java:230)
at android.view.View.draw(View.java:20234)
报错代码:
canvas.clipPath(mPath0, Region.Op.XOR);
canvas.clipPath(mPath0, Region.Op.REPLACE);
crash 原因:
Canvas.java 源码
public enum Op {
DIFFERENCE(0),
INTERSECT(1),
UNION(2),
XOR(3),
REVERSE_DIFFERENCE(4),
REPLACE(5);
Op(int nativeInt) {
this.nativeInt = nativeInt;
}
/**
* @hide
*/
public final int nativeInt;
}
private static void checkValidClipOp(@NonNull Region.Op op) {
if (sCompatiblityVersion >= Build.VERSION_CODES.P
&& op != Region.Op.INTERSECT && op != Region.Op.DIFFERENCE) {
throw new IllegalArgumentException(
"Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed");
}
}
修改意见:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P){
canvas.clipPath(mPath0);
}else {
canvas.clipPath(mPath0, Region.Op.XOR);
// canvas.clipPath(mPath0, Region.Op.REPLACE);
}
上一篇: qDebug重定向到文件