java.lang.IllegalArgumentException:无效的 Region.Op - 仅在按钮后台失败中进行交集和差异

2024-02-26

android 按钮后台失败

当我尝试添加时

android:background="@drawable/roundedbutton"

进入.xml

<Button
     android:id="@+id/button_stop"
     style="@android:style/Widget.Button"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_margin="3dp"
     android:background="@drawable/roundedbutton"
     android:layout_weight="1"
     android:text="stop"
     android:textSize="18sp" />

roundedbutton.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorPrimary" />
    <corners android:bottomRightRadius="8dp"
        android:bottomLeftRadius="8dp"
        android:topRightRadius="8dp"
        android:topLeftRadius="8dp"/>
</shape>

按钮变成空白并且 Android Studio 3.2.1 给出错误

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 android.view.ViewGroup_Delegate.drawShadow(ViewGroup_Delegate.java:86)
    at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:58)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw_Original(View.java:20075)
    at android.view.View_Delegate.draw(View_Delegate.java:68)
    at android.view.View.draw(View.java:19849)
    at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)
    at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw_Original(View.java:20075)
    at android.view.View_Delegate.draw(View_Delegate.java:68)
    at android.view.View.draw(View.java:19849)
    at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)
    at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw_Original(View.java:20075)
    at android.view.View_Delegate.draw(View_Delegate.java:68)
    at android.view.View.draw(View.java:19849)
    at android.view.ViewGroup.drawChild_Original(ViewGroup.java:4333)
    at android.view.ViewGroup_Delegate.drawChild(ViewGroup_Delegate.java:63)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw_Original(View.java:20210)
    at android.view.View_Delegate.draw(View_Delegate.java:56)
    at android.view.View.draw(View.java:20177)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:405)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:552)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:426)
    at com.android.layoutlib.bridge.BridgeRenderSession.render(BridgeRenderSession.java:108)
    at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:154)
    at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:136)
    at com.android.tools.idea.rendering.RenderTask.lambda$renderInner$5(RenderTask.java:671)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

谢谢。


UPDATE

此问题的修复将包含在 Android Studio 3.5 Canary 2 中

enter image description here

java.lang.IllegalArgumentException:无效的 Region.Op - 仅相交和差异

问题与targetSdkVersion 28

看起来这开始在 P 中强制执行:https://developer.android.com/reference/android/graphics/Canvas#clipRect(android.graphics.RectF,%20android.graphics.Region.Op) https://developer.android.com/reference/android/graphics/Canvas#clipRect(android.graphics.RectF,%20android.graphics.Region.Op)

也报道在这里

  • https://issuetracker.google.com/issues/121235731 https://issuetracker.google.com/issues/121235731
  • https://github.com/facebook/stetho/issues/607 https://github.com/facebook/stetho/issues/607
  • https://github.com/ArthurHub/Android-Image-Cropper/issues/553 https://github.com/ArthurHub/Android-Image-Cropper/issues/553
  • https://github.com/ArthurHub/Android-Image-Cropper/pull/588 https://github.com/ArthurHub/Android-Image-Cropper/pull/588

针对您的情况的临时解决方案

Use

<corners
    android:radius="8dp"/>

代替

<corners android:bottomRightRadius="8dp"
    android:bottomLeftRadius="8dp"
    android:topRightRadius="8dp"
    android:topLeftRadius="8dp"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.IllegalArgumentException:无效的 Region.Op - 仅在按钮后台失败中进行交集和差异 的相关文章

随机推荐