Как перетащить и удалить узел ARCore в Android? - PullRequest
1 голос
/ 11 октября 2019

У меня проблема, я хочу перетащить и удалить объект в ArFragment. Я попытался добавить ontouchlistener для каждого узла и ondraglistener для удаления области. Это мой код:

Это мой сенсорный слушатель

    override fun onTouch(view: View, motionEvent: MotionEvent): Boolean {
        if (motionEvent.getAction() === MotionEvent.ACTION_DOWN) {
            val data = ClipData.newPlainText("", "")
            val shadowBuilder = View.DragShadowBuilder(
                view
            )
            view.startDrag(data, shadowBuilder, view, 0)
            view.setVisibility(View.INVISIBLE)
            return true
        } else {
            return false
        }
    }
}

Это мой draglistener для области удаления

internal class MyDragListener: View.OnDragListener {

    override fun onDrag(v: View, event: DragEvent): Boolean {
        when (event.getAction()) {
            DragEvent.ACTION_DRAG_STARTED -> {
                v.visibility = View.VISIBLE
            }
            DragEvent.ACTION_DRAG_ENTERED -> v.visibility = View.VISIBLE
            DragEvent.ACTION_DRAG_EXITED -> v.visibility = View.GONE
            DragEvent.ACTION_DROP -> {
            }
            DragEvent.ACTION_DRAG_ENDED -> v.visibility = View.GONE
            else -> {
            }
        }// do nothing
        return true
    }
}

это мой текущий узел удаления (всеузлы)

fun removeAllSticker(fragment: ArFragment) {
        val nodeList = ArrayList(fragment.getArSceneView().getScene().getChildren())
        for (childNode in nodeList) {
            if (childNode is AnchorNode) {
                if ((childNode as AnchorNode).anchor != null) {
                    (childNode as AnchorNode).anchor!!.detach()
                    fragment.getArSceneView().getScene().removeChild(childNode)
                    (childNode as AnchorNode).setParent(null)
                }
            }
        }
        cleanupFragment(fragment)
    }

    private fun cleanupFragment(fragment: ArFragment) {
        val scene = fragment.arSceneView.scene
        fragment.setOnTapArPlaneListener(null)
        scene!!.removeOnUpdateListener{
            fragment.onUpdate(it)
        }
    }

Пожалуйста, помогите мне, я застрял и уже искать в Google

1 Ответ

1 голос
/ 12 октября 2019

Вот простой фрагмент кода, показывающий, как создать, а затем удалить узел:

AnchorNode anchorsNode = new AnchorNode(anchor);
anchorsNode.setParent(arFragment.getArSceneView().getScene());

Node holdNode = new Node();
holdNode.setParent(anchorsNode);
holdNode.setRenderable(yourModelRenderable);

holdNode.setOnTouchListener(new Node.OnTouchListener() {

    @override
    public boolean onTouch(HitTestResult hitTestResult, 
                             MotionEvent motionEvent) {

        anchorsNode.removeChild(holdNode);
        return true;
    }
});

В качестве альтернативы, вы можете использовать пример кода из этой записи.

И если вы хотите знать, как перетащить узел в ARCore, прочитайте этот RW пост.

...