para - manual de programacion android pdf
Cómo usar View.OnTouchListener en lugar de onClick (3)
Estoy desarrollando una aplicación Android 2.2.2 para un cliente y él quiere hacer lo siguiente:
Ahora tengo un botón con un evento onClick pero no le gusta, quiere detectar cuando el usuario suelta el botón.
He encontrado View.OnTouchListener que creo que es lo que necesito usar, pero ¿hay alguna posibilidad de agregar este evento a xml como lo hice con onClick?
<ImageButton
android:id="@+id/btnSaveNewGate"
android:layout_width="@dimen/btnSaveNewGate_width"
android:layout_height="@dimen/btnSaveNewGate_height"
android:layout_below="@+id/radioGrGateType"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onSaveNewGateClick"
android:scaleType="fitXY"
android:src="@drawable/save_gate_selector" />
Tengo dos preguntas más:
¿Cuál es el evento asociado cuando el usuario suelta su dedo?
¿Hay alguna guía que prohíba el uso de View.OnTouchListener
lugar de onClick
?
El evento cuando el usuario suelta su dedo es MotionEvent.ACTION_UP
. No sé si existen pautas que prohíban el uso de View.OnTouchListener en lugar de onClick (), lo más probable es que dependa de la situación.
Aquí hay un código de muestra:
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
// Do what you want
return true;
}
return false;
}
});
OnClick se activa cuando el usuario suelta el botón. Pero si aún desea utilizar el TouchListener, debe agregarlo en el código. Es solo:
myView.setOnTouchListener(new View.OnTouchListener()
{
// Implementation;
});
Presumiblemente, si uno quiere usar un OnTouchListener
lugar de un OnClickListener
, entonces se necesita la funcionalidad adicional del OnTouchListener
. Esta es una respuesta complementaria para mostrar más detalles de cómo se puede usar un OnTouchListener
.
Definir el oyente
Pon esto en alguna parte de tu actividad o fragmento.
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
Establecer el oyente
Establezca el oyente en onCreate
(para una actividad) o onCreateView
(para un fragmento).
myView.setOnTouchListener(handleTouch);
Notas
-
getX
ygetY
dan las coordenadas relativas a la vista (es decir, la esquina superior izquierda de la vista). Serán negativos cuando se mueva arriba o hacia la izquierda de su vista. UsagetRawX
ygetRawY
si quieres las coordenadas de pantalla absolutas. - Puede usar los valores
y
para determinar cosas como la dirección del deslizamiento.