Jetpack Compose。 Redmi 设备上未指定偏移量

问题描述 投票:0回答:4

在我的项目中,我遇到了很多这样的例外:

Fatal Exception: java.lang.IllegalStateException
Offset is unspecified

这些异常仅出现在 Redmi 设备(平板电脑和手持设备)上。 从 Jetpack Compose 版本 1.1.0 到最新的 1.2.0-beta03 都存在此问题,因此无法更改版本。

有完整的堆栈跟踪:

androidx.compose.ui.geometry.Offset.getX-impl (Offset.java:28)
androidx.compose.ui.platform.AndroidComposeView.recalculateWindowPosition (AndroidComposeView.java:2)
androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc (AndroidComposeView.java:6)
androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent (AndroidComposeView.java:62)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3088)
android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2781)
com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:496)
com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1853)
android.app.Activity.dispatchTouchEvent (Activity.java:4072)
com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:454)
android.view.View.dispatchPointerEvent (View.java:13744)
android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:5601)
android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:5401)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4955)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4921)
android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5061)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4929)
android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:5118)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:4955)
android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:4921)
android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:4929)
android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:4902)
android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:7654)
android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:7623)
android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:7584)
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:7785)
android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:251)
android.view.InputEventReceiver.nativeConsumeBatchedInputEvents (InputEventReceiver.java)
android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:213)
android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl.java:7730)
android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run (ViewRootImpl.java:7809)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1031)
android.view.Choreographer.doCallbacks (Choreographer.java:854)
android.view.Choreographer.doFrame (Choreographer.java:782)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1016)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
android.os.Looper.loop (Looper.java:223)
android.app.ActivityThread.main (ActivityThread.java:7562)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)

有人遇到过吗?

android android-jetpack-compose
4个回答
2
投票

当我通过 Modifier.graphicsLayer{} 更改比例时动态更改可组合项的触摸区域时,我遇到了这个问题,并且我还使用

Offset.Unspecified
最初不在画布上绘制绘图应用程序。

如果问题发生在小区域且可忽略不计的使用

if(offset != Offset.Unspecified) {
    xCoor = offset.x
    yCoor = offset.y
   // or do drawing with offset here for valid values

如果这是一种除了 Offset.Unspecified 之外从不返回任何值的行为,您应该为其打开一个问题。


1
投票

当我的偏移参数不是数字时,我常常会遇到此异常。
确保您的 Offset 参数是数字。

以下是检查它是否是数字的方法:

if(offsetX.isNaN().not()){
//handle your code here
}

0
投票

我在没有直接使用偏移量的情况下遇到了这个问题,但是当使用“.rotate()”修饰符时,问题是 .rotate() 中被零除,所以它试图按 NaN 旋转。


0
投票

在使用 TextField 并使用动画移动到不同的屏幕时,我遇到了同样的问题。要解决这个问题,您必须在进行一些动画或过渡之前清除 TextField 的焦点,如下所示:

val focusManager = LocalFocusManager.current

LaunchedEffect(key1 = someState) {
    if (someState) {
        focusManager.clearFocus()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.