2014-12-22 2 views
0

Vuforia의 Java API로 Android에서 작업하고 있습니다. 마커가 감지되면 단추를 표시하고 주전자처럼 마커가 감지되지 않으면 숨기려고합니다. 어떤 표적 (칩과 돌)이 발견되면 버튼을 성공적으로 보여줄 수 있습니다. Vuforia가 제공 한 튜토리얼 덕분에 ("트리거링 - 이벤트 - 타겟 감지시").Vuforia의 Java API를 사용하여 대상이 검색되지 않을 때 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(); 
     } 

    } 

답변

1

OLRITE ... 문제를 해결할 수있었습니다. 다른 사람들에게 도움이 될 수 있도록 솔루션을 공유하겠습니다.

일반적으로, 현재 을 확인하여 (여부)를 추적하고 모든 대상을 추적/알 수 있습니다. 그래서 ImageTargetRenderer.java의 renderFrame().

for (int tIdx = 0; tIdx < state.getNumTrackableResults(); tIdx++) { 
      TrackableResult result = state.getTrackableResult(tIdx); 
      Trackable trackable = result.getTrackable(); 

그래서, 추적 가능한이 상태에 나열되어있는 경우 (state.getTrackable (인덱스)와 state.getNumTrackableResults는())가이 목록에없는 경우, 당신은 현재 Vuforia에 의해 추적되고 있음을 알 것이다 추적 가능 항목이 손실되었음을 알 수 있습니다 (사용할 수 없음).

따라서 단지 루프에 대한 위의 정의 앞에 다음 코드를 추가하여 -

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

displayMessage("None"); 

lastTrackableId = -1; 

} 

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

     }; 

이 나를 위해 속임수를 썼는지

:

이 내 onResume lookslike 방법입니다