studio - Usando el gesto de Android en la parte superior de los botones del menú
programacion android pdf 2018 (1)
Lo que quiero es tener un menú de opciones donde el usuario pueda elegir navegar por el menú entre:
- Tocar un botón y luego presionar la rueda de desplazamiento hacia abajo para seleccionarlo
- Dibujar gestos predefinidos desde Gestures Builder.
Tal como está ahora, he creado mis botones con OnClickListener
y los gestos con GestureOverlayView
. Luego selecciono comenzar una nueva Activity
dependiendo de si presioné un botón o ejecuté un gesto. Sin embargo, cuando intento dibujar un gesto, no se recoge. Sólo se reconoce pulsando los botones. El siguiente es mi código:
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;
}
}
Cualquier sugerencia sería muy apreciada!
Si entendí correctamente, desea realizar tanto la acción de clic como la de gesto en la misma vista, no estoy seguro de cómo lograrlo; sin embargo, podemos tener una vista invisible detrás de los botones para manejar el gesto y los botones en la parte superior manejarán el clic eventos como de costumbre.
La aplicación Calculadora predeterminada utiliza este enfoque para cambiar entre el modo normal y el modo avanzado.
Consulte, com.android.calculator2.PanelSwitcher - para eventos gestuales com.android.calculator2.EventListener - para eventos clic
Espero eso ayude.