Selector reacciona lentamente – a veces no disparar en absoluto antes de iniciar la siguiente actividad

Tengo este selector definido:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- PRESSED --> <item android:state_pressed="true" android:drawable="@drawable/backarrow_blueshiny" /> <!-- FOCUSED --> <item android:state_focused="true" android:drawable="@drawable/backarrow_blackshiny" /> <!-- DEFAULT --> <item android:drawable="@drawable/backarrow_blackshiny" /> </selector> 

y se utiliza con este botón:

  <RelativeLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bottomborder_glossy"> <!-- BACK --> <ImageButton android:id="@+id/filter_button_back" android:layout_width="90dip" android:layout_height="wrap_content" android:src="@drawable/selector_back_button" android:background="#00000000" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true"/> </RelativeLayout> 

y el evento onTouch consta de:

 public boolean onTouch(View v, MotionEvent event) { final int actionPerformed = event.getAction(); final int widgetID = v.getId(); if (actionPerformed == MotionEvent.ACTION_UP) { switch (widgetID) { case R.id.filter_button_back: { this.finish(); break; } } } return false; } 

lo que este botón hace es salir de la actividad actual this.finish() Sin embargo, en mis pruebas el botón no siempre cambia a "backarrow_blueshiny" – es decir, al presionar muy rápido.

El problema es que el selector se dispara más lentamente que el evento onTouch (MotionEvent.ACTION_UP).

¿Hay algo que pueda hacer para asegurarme de que el selector no sea "laggy"?

¿Te refieres a laggier que el típico comportamiento de selector de Android? En mi experiencia, siempre ha habido un ligero retraso entre una pulsación de botón, y está siendo seleccionado – Supongo que es para evitar mostrar un evento de toque cuando sólo está deseando desplazarse, pero siempre me molesta. Si es más que el comportamiento típico, intente usar sólo un botón, con el conjunto de iconos de android:src en el selector, en lugar de un ImageButton con el android:src establecido en el selector.

p.ej

 <Button android:layout_width="90dip" android:layout_height="wrap_content" android:background="@drawable/selector_back_button" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" /> 

Intente establecer su vista como presionada mediante programación en OnTouchListener:

 @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: button.setPressed(true); break; case MotionEvent.ACTION_UP: // optional, should work without next line // button.setPressed(false); break; } return false; } 

Yo tuve el mismo problema. En el emulador ni siquiera cambia el color del botón. Es causado por el "onTouch". Si utiliza onClickListener en lugar de onTouchListener, reaccionará como se esperaba.

Como puedo ver que no está utilizando ninguna capacidad multitáctil tan wy no utiliza el onClick y deshacerse de la

  if (actionPerformed == MotionEvent.ACTION_UP) 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.