sensibilidad - evento touch android studio
Obtén las coordenadas de un evento táctil en Android (4)
La versión corregida sin los errores:
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : "
+ String.valueOf(event.getX()) + "x"
+ String.valueOf(event.getY()));
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Soy nuevo en Android, he seguido el tutorial de hello world y tengo una idea básica de lo que está pasando. Estoy particularmente interesado en la pantalla táctil de mi T-Mobile Pulse, por lo que, para comenzar, quiero poder escribir las coordenadas de un evento en la pantalla, así que, digamos, el usuario tocó la coordenada 5 , 2 - una vista de texto en la pantalla mostraría eso.
En este momento tengo un programa simple que solo carga un archivo xml que contiene la vista de texto en la que tengo la intención de escribir las coordenadas.
Gracias de antemano, busqué ayuda en Google y busqué stackoverflow, pero todo lo que encontré se me pasó de la cabeza o no era adecuado para esto. Aclamaciones.
Los siguientes trabajos utilizan una pantalla táctil en la aplicación de Android Jetboy de muestra. El código de Joes trabajó con un solo tweak para que brille el fondo a través. La única línea que agregué fue
android:background="#0000"
android:layout_height="fill_parent"
android:layout_height="fill_parent"
Gracias Joe (arriba).
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView textView = (TextView)findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
return true;
}
});
}
código de diseño
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.android.samples.jetboy.JetBoyView android:id="@+id/JetBoyView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/touchView"
android:background="#0000"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hello World, TestActivity"
/>
</FrameLayout>
Parece que desea obtener eventos táctiles de toda el área de su diseño para esta prueba en particular. Intente adjuntar la escucha táctil a su vista principal en lugar de una vista de destino separada.
Este no es un enfoque muy común. En la mayoría de los casos, deseará escuchar eventos táctiles en una vista secundaria específica y si tiene otras vistas en su diseño que manejan eventos táctiles (como un botón), tendrán prioridad sobre la vista principal. Consulte http://developer.android.com/guide/topics/ui/ui-events.html para obtener más información sobre el manejo de eventos de IU.
Diseño (touch_viewer.xml):
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/parent" >
<TextView android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello, World!" />
</LinearLayout>
Y en tu actividad:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.touch_viewer);
final LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
final TextView text = (TextView) findViewById(R.id.text);
parent.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent ev) {
text.setText("Touch at " + ev.getX() + ", " + ev.getY());
return true;
}
});
}
Puede usar esta función: http://developer.android.com/reference/android/view/View.html#setOnTouchListener(android.view.View.OnTouchListener)
Probablemente lo ponga en su método onCreate aproximadamente de esta manera (probado esta vez):
Actividad enCrear código
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView textView = (TextView)findViewById(R.id.textView);
// this is the view on which you will listen for touch events
final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
textView.setText("Touch coordinates : " +
String.valueOf(event.getX()) + "x" + String.valueOf(event.getY()));
return true;
}
});
}
código de diseño
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/touchView"
android:background="#f00"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/textView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, TestActivity"
/>
</LinearLayout>
Edit : Probé mi código y de hecho hubo algunos errores. De todos modos, con el diseño que te doy aquí funciona en mi emulador. ¿Puede proporcionar tal vez más código / contexto para que pueda ver qué está mal?