¿Cuáles son los aspectos básicos de cómo tratar los eventos de entrada de usuarios en Android?

Pensé que había entendido esta pregunta, pero algo está muy mal aquí. Cuando el usuario (yo, hasta ahora) trata de presionar las teclas, nada realmente sucede, y estoy teniendo muchos problemas para entender lo que es lo que he perdido.

Considere esto antes de que presente algún código para ayudar a aclarar mi problema: Estoy usando el ejemplo de Lander lunar de Android para hacer mi primer programa "real" de Android. En ese ejemplo, por supuesto, existe una clase LunarView, y la clase anida allí LunarThread. En mi código los equivalentes de estas clases son Graphics y GraphicsThread, respectivamente.

También puedo hacer animaciones sprite en 2D muy bien en Android. Tengo una clase de Jugador, y digamos que GraphicsThread tiene un miembro Player llamado "player". Esta clase tiene cuatro coordenadas – x1, y1, x2 y y2 – y definen un rectángulo en el que se va a dibujar el sprite. Lo he trabajado para que pueda manejarlo perfectamente. Cada vez que se invoca el método doDraw (Lienzo lienzo), sólo verá los valores de esas coordenadas y dibujará el sprite en consecuencia.

Ahora vamos a decir – y esto no es realmente lo que estoy tratando de hacer con el programa – Estoy tratando de hacer que el programa donde todo lo que hace es mostrar el sprite jugador en una ubicación de la pantalla hasta la primera vez que el usuario Presiona el botón izquierdo del Dpad. A continuación, la ubicación se cambiará a otra posición de conjunto en la pantalla, y el sprite se dibujará en esa posición para el resto del programa invariablemente.

Observe también que el miembro GraphicsThread en Graphics se llama "thread" y que el miembro SurfaceHolder en GraphicsThread se denomina "mSurfaceHolder".

Así que considere este método en la clase Graphics:

@Override public boolean onKeyDown(int keyCode, KeyEvent msg) { return thread.keyDownHandler(keyCode, msg); } 

También considere este método en la clase GraphicsThread:

 boolean keyDownHandler(int keyCode, KeyEvent msg) { synchronized (mSurfaceHolder) { if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { player.x1 = 100; player.y1 = 100; player.x2 = 120; player.y2 = 150; } } return true; } 

Ahora, suponiendo que las coordenadas del jugador comienzan como (200, 200, 220, 250), ¿por qué no hará nada diferente cuando presione Dpad: Izquierda?

¡Gracias!

Antes de que me preocuparía por el movimiento real y lo que yo consideraría Log …

Algo como:

 Log.d("lunar", "keyCode = ["+String.valueOf(keyCode)+"] // msg = ["+String.valueOf(msg)+"]"); 

Al hacerlo, puedo tener una idea de lo que el sistema está registrando antes de preocuparme por lo que hago con dichos datos registrados … Después de eso usted puede decidir si incluso está enviando el material adecuado y luego puede preocuparse por el trabajo de hilo Etc.

Esperemos que pueda ayudar a diagnosticar etc. (Todo esto fue escrito a mano alzada, puede contener errores)

Deseche LunarLander y utilice una guía real: Jugar con gráficos en Android

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.