ARCORE: вид (информационная карта) не появляется после нажатия - PullRequest
0 голосов
/ 21 января 2020

Я новичок в Arcore и использую сцену для проекта. В частности, я использую пример солнечной системы и пытаюсь внедрить информационные карты, которые есть в Planet.java, для моего проекта. У меня настроены информационные карты (по крайней мере, я так думаю), но они не отображаются при нажатии. Я что-то упускаю или я что-то не так делаю? Заранее благодарю за помощь.

private void makeinfoCards(ArFragment arFragment, Anchor anchor, Context context) {
        if (infoCard == null) {
            AnchorNode anchorNode = new AnchorNode(anchor);
            infoCard = new Node();
            infoCard.setParent(anchorNode);
            infoCard.setEnabled(false);
            infoCard.setLocalPosition(new Vector3(0.0f, 2.90f * INFO_CARD_Y_POS_COEFF, 0.0f));
            //below would hide/bring up the info card on tap
            infoCard.setOnTapListener(  //anchorNode.setOnTapListener doesn't make info card appear either
                    (hitTestResult, motionEvent) -> {
                        infoCard.setEnabled(!infoCard.isEnabled());
                    }
            );
            ViewRenderable.builder()
                    .setView(arFragment.getContext(), R.layout.card_view) //putting context instead makes no difference
                    .build()
                    .thenAccept(
                            (renderable) -> {
                                infoCard.setRenderable(renderable);
                                TextView textView = (TextView) renderable.getView();
                                textView.setText("random");
                            })
                    .exceptionally(
                            (throwable) -> {
                                throw new AssertionError("Could not load plane card view.", throwable);
                            });
        }

}

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Реализовать Node.OnTapListener интерфейс и затем переопределить метод onTap.

Когда модель будет спроецирована, ведите учет узлов модели в списке. Здесь я установил карту для каждого узла, присутствующего в форме сцены.

@Override
public void onTap(HitTestResult hitTestResult, MotionEvent motionEvent)   {

        modelDataObj = map.get(hitTestResult.getNode()); // get object againt each node
        tvModelName.setText(modelDataObj.getItem_name());
        Picasso.get().load(modelDataObj.get_thumbnail()).placeholder(R.drawable.imageplaceholder).into(imgLoadAddInfoImage);
        tvTitle.setText(modelDataObj.getItem_name());
        tvLoadAddInfoDescText.setText(modelDataObj.getDescription())
}
0 голосов
/ 22 января 2020

Вы установили onTapListener на узле infoCard, который по умолчанию отключен. Вы должны использовать setOnTapListener на узле, который содержит 3D-модель, на которую вы будете щелкать, попробуйте передать в качестве аргумента функции указанный узел c, в котором 3D-модель установлена ​​в качестве аргумента для рендеринга, а не Anchor. Если у вас есть Node, скажите modelNode, который имеет 3D-модель.

В вашем вызове ARActivity

makeInfoCard(arFragment,modelNode,context);

И в функции используйте

private void makeInfoCard(ArFragment arFragment, Node modelNode, Context context){
//
    modelNode.setOnTapListener((hitTestResult, motionEvent) -> {
        infoCard.setEnabled(!infoCard.isEnabled());
    });
//
}
...