首页 > 解决方案 > ARCORE:点击后视图(信息卡)不出现

问题描述

我是 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);
                            });
        }

}

标签: javaandroid-studioarcoresceneform

解决方案


实现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())
}

推荐阅读