Я пытаюсь расширить TransformableNode, чтобы я мог привязать его к обнаруженному изображению и повернуть / изменить размер. Пока эти две функции работают нормально, но я сталкиваюсь с падением всякий раз, когда я перетаскиваю свой узел и перемещаю его куда-либо (даже немного).
Вот мой подход к созданию трансформируемого узла с привязками к изображению:
AnchorNode aNode;
TransformableNode tNode;
aNode = new AnchorNode(image.createAnchor(image.getCenterPose()));
aNode.setParent(this);
tNode = new TransformableNode(transSystem);
tNode.setParent(aNode);
А вот отчет о сбое, который я получаю:
E/InputEventReceiver: Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.IllegalStateException: TransformableNode must have an AnchorNode as a parent.
at com.google.ar.sceneform.ux.TranslationController.getAnchorNodeOrDie(TranslationController.java:209)
at com.google.ar.sceneform.ux.TranslationController.onEndTransformation(TranslationController.java:169)
at com.google.ar.sceneform.ux.TranslationController.onEndTransformation(TranslationController.java:44)
at com.google.ar.sceneform.ux.BaseTransformationController.onFinished(BaseTransformationController.java:117)
at com.google.ar.sceneform.ux.BaseGesture.dispatchFinishedEvent(BaseGesture.java:136)
at com.google.ar.sceneform.ux.BaseGesture.complete(BaseGesture.java:118)
at com.google.ar.sceneform.ux.DragGesture.updateGesture(DragGesture.java:125)
at com.google.ar.sceneform.ux.BaseGesture.onTouch(BaseGesture.java:92)
at com.google.ar.sceneform.ux.BaseGestureRecognizer.onTouch(BaseGestureRecognizer.java:67)
at com.google.ar.sceneform.ux.TransformationSystem.onTouch(TransformationSystem.java:160)
at com.google.ar.sceneform.ux.BaseArFragment.onPeekTouch(BaseArFragment.java:424)
at com.google.ar.sceneform.TouchEventSystem.onTouchEvent(Unknown Source:39)
at com.google.ar.sceneform.Scene.onTouchEvent(Unknown Source:11)
at com.google.ar.sceneform.SceneView.onTouchEvent(Unknown Source:9)
at android.view.View.dispatchTouchEvent(View.java:12615)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:541)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1893)
at android.app.Activity.dispatchTouchEvent(Activity.java:3572)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:490)
at android.view.View.dispatchPointerEvent(View.java:12860)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5767)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5533)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4987)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5040)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5006)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5160)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5014)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5217)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4987)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5040)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5006)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5014)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4987)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7794)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7759)
at android.view.ViewRootImpl.enqueueInpu
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.ar.sceneform.samples.augmentedimage, PID: 7514
java.lang.IllegalStateException: TransformableNode must have an AnchorNode as a parent.
at com.google.ar.sceneform.ux.TranslationController.getAnchorNodeOrDie(TranslationController.java:209)
at com.google.ar.sceneform.ux.TranslationController.onEndTransformation(TranslationController.java:169)
at com.google.ar.sceneform.ux.TranslationController.onEndTransformation(TranslationController.java:44)
at com.google.ar.sceneform.ux.BaseTransformationController.onFinished(BaseTransformationController.java:117)
at com.google.ar.sceneform.ux.BaseGesture.dispatchFinishedEvent(BaseGesture.java:136)
at com.google.ar.sceneform.ux.BaseGesture.complete(BaseGesture.java:118)
at com.google.ar.sceneform.ux.DragGesture.updateGesture(DragGesture.java:125)
at com.google.ar.sceneform.ux.BaseGesture.onTouch(BaseGesture.java:92)
at com.google.ar.sceneform.ux.BaseGestureRecognizer.onTouch(BaseGestureRecognizer.java:67)
at com.google.ar.sceneform.ux.TransformationSystem.onTouch(TransformationSystem.java:160)
at com.google.ar.sceneform.ux.BaseArFragment.onPeekTouch(BaseArFragment.java:424)
at com.google.ar.sceneform.TouchEventSystem.onTouchEvent(Unknown Source:39)
at com.google.ar.sceneform.Scene.onTouchEvent(Unknown Source:11)
at com.google.ar.sceneform.SceneView.onTouchEvent(Unknown Source:9)
at android.view.View.dispatchTouchEvent(View.java:12615)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3041)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2728)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:541)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1893)
at android.app.Activity.dispatchTouchEvent(Activity.java:3572)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:490)
at android.view.View.dispatchPointerEvent(View.java:12860)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5767)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5533)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4987)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5040)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5006)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5160)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5014)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5217)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4987)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5040)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5006)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5014)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4987)
E/AndroidRuntime: at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7794)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7759)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7717)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7986)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:202)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:386)
at android.os.Looper.loop(Looper.java:169)
at android.app.ActivityThread.main(ActivityThread.java:7470)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
I/Process: Sending signal. PID: 7514 SIG: 9
Application terminated.
Насколько я понимаю, я перемещаю узел на новую позицию и не назначаю ему новую привязку. Если я прав, то мой вопрос: как мне изменить какой-либо метод Event или мою реализацию, чтобы мое приложение не зависало? (Я не против избавиться от перетаскивания узла tbh).