我正在使用Vuforia的Java API开发Android。我想在检测到标记时显示一个按钮,并在未检测到标记时隐藏它,就像茶壶一样。当检测到任何目标(筹码和石块)时,我可以成功显示按钮。感谢Vuforia提供的教程(“触发-ui-events-when-target-detected”)。
但是,现在我可以在检测到目标后显示隐藏按钮,但是当目标不再可用时,它不会隐藏。我假设我可能需要像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();
}
}
答案 0 :(得分:2)
OLRITE ......我设法解决了这个问题。让我分享解决方案,以便它可能对其他人有所帮助。
通常,您可以通过查看 州 来了解/跟踪当前正在跟踪(或不跟踪)的任何目标。所以在ImageTargetRenderer.java的renderFrame()。
中for (int tIdx = 0; tIdx < state.getNumTrackableResults(); tIdx++) {
TrackableResult result = state.getTrackableResult(tIdx);
Trackable trackable = result.getTrackable();
因此,如果Trackable在状态中列出(state.getTrackable(index)和state.getNumTrackableResults()),您将知道Vuforia目前正在跟踪它,如果它没有在那里列出,您将会知道Trackable已丢失(不可用);
因此,在上面定义的for循环之前添加以下代码 -
if (state.getNumTrackableResults() == 0) {
displayMessage("None");
lastTrackableId = -1;
}
然后displayMessage方法完成其余的工作。在ImageTargets.java中,我们可以使用我们收到的值隐藏UI视图(我的案例中的按钮/ b3.setVisibility(View.GONE);)。
这就是我的onResume看起来的样子:
@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);
}
}
};
这对我有用......