使用Vuforia';未检测到目标时隐藏UI元素;s Java API

使用Vuforia';未检测到目标时隐藏UI元素;s Java API,java,android,opengl-es-2.0,vuforia,Java,Android,Opengl Es 2.0,Vuforia,我正在使用Vuforia的Java API开发Android。我想在检测到标记时显示一个按钮,在未检测到标记时隐藏它,就像茶壶一样。当检测到任何目标(碎片和石头)时,我可以成功地显示按钮。感谢Vuforia提供的教程(“检测到目标时触发ui事件”) 但是,现在我可以在检测到目标后显示隐藏按钮,当目标不再可用时,它不会隐藏。我假设可能需要像doLoadTrackersData()和doUnloadTrackersData()方法一样获取TrackerManager实例,并查找mCurrentDat

我正在使用Vuforia的Java API开发Android。我想在检测到标记时显示一个按钮,在未检测到标记时隐藏它,就像茶壶一样。当检测到任何目标(碎片和石头)时,我可以成功地显示按钮。感谢Vuforia提供的教程(“检测到目标时触发ui事件”)

但是,现在我可以在检测到目标后显示隐藏按钮,当目标不再可用时,它不会隐藏。我假设可能需要像doLoadTrackersData()和doUnloadTrackersData()方法一样获取TrackerManager实例,并查找mCurrentDataset是否处于活动状态。然而,到目前为止,我对这一问题的理解令人遗憾。请帮忙…。我的onResume()代码如下:

@Override
    protected void onResume() {
        Log.d(LOGTAG, "onResume");
        super.onResume();
        displayMessageHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {

                TrackerManager tManager = TrackerManager.getInstance();
                ImageTracker imageTracker = (ImageTracker) tManager
                        .getTracker(ImageTracker.getClassType());

                String text = (String) msg.obj;

                Toast.makeText(getApplicationContext(), text,
                        Toast.LENGTH_SHORT).show();


                    if (text.equalsIgnoreCase("stones")) {
                        Log.e("Is it Stones", text);
                        b3.setBackgroundResource(R.drawable.up);
                        b3.startAnimation(shake);
                        b3.setVisibility(View.VISIBLE);
                    } else if (text.equalsIgnoreCase("chips")) {
                        Log.e("Is it chips", text);
                        b3.setBackgroundResource(R.drawable.up);
                        b3.startAnimation(shake);
                        b3.setVisibility(View.VISIBLE);

                    } else {
                        Log.e("ELSE", text);
                        b3.setVisibility(View.GONE);
                    }
                }

        };

        // This is needed for some Droid devices to force portrait
        if (mIsDroidDevice) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }

        try {
            vuforiaAppSession.resumeAR();
        } catch (SampleApplicationException e) {
            Log.e(LOGTAG, e.getString());
        }

        // Resume the GL view:
        if (mGlView != null) {
            mGlView.setVisibility(View.VISIBLE);
            mGlView.onResume();
        }

    }

嗅石。。。我设法解决了这个问题。让我来分享这个解决方案,这样可能会对其他人有所帮助

通常,通过检查状态,可以了解/跟踪当前正在跟踪(或未跟踪)的任何目标。因此,在ImageTargetRenderer.java的renderFrame()中

然后,displayMessage方法完成其余的工作。在ImageTargets.java中,我们可以使用接收到的值来隐藏UI视图(在我的例子中是按钮/b3.setVisibility(view.GONE);)

我的简历是这样的:

@Override
    protected void onResume() {
        Log.d(LOGTAG, "onResume");
        super.onResume();
        displayMessageHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {

                String text = (String) msg.obj;

                if (text.equalsIgnoreCase("stones")) {
                    Log.e("Is it Stones", text);
                    b3.setBackgroundResource(R.drawable.up);
                    b3.startAnimation(shake);
                    b3.setVisibility(View.VISIBLE);
                } else if (text.equalsIgnoreCase("chips")) {
                    Log.e("Is it chips", text);
                    b3.setBackgroundResource(R.drawable.up);
                    b3.startAnimation(shake);
                    b3.setVisibility(View.VISIBLE);
                } else {
                    b3.setVisibility(View.GONE);
                }
            }

        };
这对我很有帮助

if (state.getNumTrackableResults() == 0) {

displayMessage("None");

lastTrackableId = -1;

}
@Override
    protected void onResume() {
        Log.d(LOGTAG, "onResume");
        super.onResume();
        displayMessageHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {

                String text = (String) msg.obj;

                if (text.equalsIgnoreCase("stones")) {
                    Log.e("Is it Stones", text);
                    b3.setBackgroundResource(R.drawable.up);
                    b3.startAnimation(shake);
                    b3.setVisibility(View.VISIBLE);
                } else if (text.equalsIgnoreCase("chips")) {
                    Log.e("Is it chips", text);
                    b3.setBackgroundResource(R.drawable.up);
                    b3.startAnimation(shake);
                    b3.setVisibility(View.VISIBLE);
                } else {
                    b3.setVisibility(View.GONE);
                }
            }

        };