前言
最近在写圆角相机预览的时候 在自定义View里报了一个异常
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.clipPath(Canvas.java:1007)
at com.kiminonawa.mydiary.entries.calendar.PageEffectView.drawCurrentPageArea(PageEffectView.java:340)
at com.kiminonawa.mydiary.entries.calendar.PageEffectView.onDraw(PageEffectView.java:383)
at android.view.View.draw(View.java:20234)
at android.view.View.updateDisplayListIfDirty(View.java:19109)
Android版本兼容性问题
打卡拍照预览的页面的时候 直接崩溃了 搜索了一下资料 原来是适配的问题 是android 版本太低或者太高导致的
解决方法
在draw这个方法里多加个版本判断
@Override
//绘制一个圆形的框,并设置圆框的坐标和半径大小
//这个绘制在16:9的手机上显示很好,但是在更长的手机上(大于16/9)会偏上,
public void draw(Canvas canvas) {
Path path = new Path();
//Path.Direction 顺时针与逆时针;
path.addCircle(widthSize >> 1, widthSize >> 1, 160, Path.Direction.CW);
// Region.Op 圆形矩形取交集位置
if (Build.VERSION.SDK_INT >= 28) {
canvas.clipPath(path);
} else {
canvas.clipPath(path, Region.Op.REPLACE);
}
super.draw(canvas);
}
效果
|