2010-02-02 6 views
19

Was ich will, ist ein Optionsmenü haben, wo der Benutzer das Menü zwischen navigieren wählen:mit Android Geste auf der Menütasten

  1. Berühren einer Schaltfläche und dann auf den Trackball nach unten drücken, um es auszuwählen
  2. Zeichnung vordefinierten Gesten von Gestures Builder

Wie es jetzt aussieht, ich habe meine Tasten mit OnClickListener und die Gesten mit GestureOverlayView erstellt. Dann wähle ich das Starten einer neuen Activity abhängig davon, ob die Benutzung eine Taste gedrückt oder eine Geste ausgeführt hat. Wenn ich jedoch versuche, eine Geste zu zeichnen, wird sie nicht aufgenommen. Nur das Drücken der Tasten wird erkannt. Das Folgende ist mein Code:

public class Menu extends Activity implements OnClickListener, OnGesturePerformedListener { 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //create TextToSpeech 
    myTTS = new TextToSpeech(this, this); 
    myTTS.setLanguage(Locale.US); 

    //create Gestures 
    mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); 
    if (!mLibrary.load()) { 
    finish(); 
    } 

    // Set up click listeners for all the buttons. 
    View playButton = findViewById(R.id.play_button); 
    playButton.setOnClickListener(this); 
    View instructionsButton = findViewById(R.id.instructions_button); 
    instructionsButton.setOnClickListener(this); 
    View modeButton = findViewById(R.id.mode_button); 
    modeButton.setOnClickListener(this); 
    View statsButton = findViewById(R.id.stats_button); 
    statsButton.setOnClickListener(this); 
    View exitButton = findViewById(R.id.exit_button); 
    exitButton.setOnClickListener(this); 

    GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); 
    gestures.addOnGesturePerformedListener(this); 
} 

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { 
    ArrayList<Prediction> predictions = mLibrary.recognize(gesture); 

// We want at least one prediction 
if (predictions.size() > 0) { 
Prediction prediction = predictions.get(0); 
// We want at least some confidence in the result 
if (prediction.score > 1.0) { 
    // Show the gesture 
    Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show(); 
    //User drew symbol for PLAY 
    if (prediction.name.equals("Play")) { 
     myTTS.shutdown(); 
     //connect to game 
     // User drew symbol for INSTRUCTIONS 
    } else if (prediction.name.equals("Instructions")) { 
      myTTS.shutdown(); 
      startActivity(new Intent(this, Instructions.class)); 
     // User drew symbol for MODE 
    } else if (prediction.name.equals("Mode")){ 
     myTTS.shutdown(); 
     startActivity(new Intent(this, Mode.class)); 
     // User drew symbol to QUIT 
    } else { 
     finish(); 
    } 
    } 
} 
} 

@Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
     case R.id.instructions_button: 
     startActivity(new Intent(this, Instructions.class)); 
     break; 
     case R.id.mode_button: 
     startActivity(new Intent(this, Mode.class)); 
     break; 
     case R.id.exit_button: 
     finish(); 
     break; 
    } 
} 

Alle Vorschläge würden sehr geschätzt werden!

+0

Funktioniert die Geste? wird 'onGesturePerformed' aufgerufen? – Macarse

+0

Wie sieht dein Layout aus? Es ist gut möglich, dass das Gesten-Overlay nicht dort ist, wo der Benutzer Gesten zeichnet. –

+0

Gesten scheinen über viele ui Kontrollen nicht sehr gut zu funktionieren. Ich musste auf ein dediziertes "slide me" -Steuerelement zurückgreifen, wo der Benutzer darüber gleitet und es sagt "Gesten erkannt". es verschlingt jedoch Immobilien. Sehen Sie meine App CueBrain, um zu sehen, wie es aussieht. – swinefeaster

Antwort

2

Wenn ich richtig verstanden habe, möchten Sie sowohl klicken Aktion und Geste Aktion auf der gleichen Ansicht, ich bin mir nicht sicher, wie dies zu erreichen, aber wir können unsichtbare Ansicht hinter den Tasten Gesten und Tasten an der Spitze haben verarbeitet die Klickereignisse wie gewohnt.

Die Standard-Rechneranwendung verwendet diese Methode, um zwischen dem normalen Modus und dem erweiterten Modus zu wechseln. Siehe

Calculator Source

, com.android.calculator2.PanelSwitcher - für Gestenereignisse com.android.calculator2.EventListener - für Click-Ereignisse

hoffe, es hilft.

Verwandte Themen