onTouchListener anula un fondo personalizado en la vista de botón?
Tengo un button_animation.xml en mi carpeta res / drawable para mostrar diferentes estados de los botones (predeterminado, presionado, enfocado). Referencia button_animation.xml en un botón en mi archivo de disposición. Funciona perfectamente, excepto cuando pongo un onTouchListener en el botón que está siendo presionado. A continuación se muestra mi código.
button_animation.xml
- ¿Cómo varía el tamaño de la instalación de la aplicación en el teléfono?
- ¿Cómo puedo cerrar un SearchView mediante programación?
- Ocultar búsqueda / ir botón en el teclado virtual cuando se utiliza la búsqueda?
- se llama onmeasure y no sé por qué - android
- Vista personalizada de Android con los atributos personalizados
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/button_pressed" android:state_pressed="true" /> <item android:drawable="@drawable/button_focused" android:state_focused="true" /> <item android:drawable="@drawable/button_default" /> </selector>
layout.xml
<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_animation" />
Código que hace que la animación se rompa
Button button = (Button) findViewById(R.id.button1); button.setOnTouchListener(this);
¿No puedo mostrar el estado del botón como sugiere la documentación y manejarlo al mismo tiempo para una vista en particular?
Documentación: http://developer.android.com/guide/topics/ui/controls/button.html
Gracias,
Jason
- ¿Cómo agrego un botón a una clase "extends View"?
- ¿Es posible usar inflador de vista para inflar artículos individuales?
- View getWidth () y getHeight () devuelven 0
- GetHeight () vs getLayoutParams (). Altura
- ¿Cómo puedo obtener OnBackPressed () mientras SearchView está activado?
- Diseño de animación Android
- Obtener el ancho / altura de la vista o el ancho / altura / otros tamaños de la fuente antes de la primera visualización
- Getmeasuredheight () y getmeasuredwidth () devuelve 0 después de View.measure ()
Debe utilizar button.setOnClickListener (this) en lugar de button.setOnTouchListener (this) y la clase debe implementar OnClickListener.
Si todavía tiene que manejar onTouch (hacia abajo y hacia arriba), puede manejar la configuración de fondo usted mismo.
public boolean onTouch( View button, MotionEvent theMotion ) { switch ( theMotion.getAction() ) { case MotionEvent.ACTION_DOWN: //Set button background here break; case MotionEvent.ACTION_UP: //set button to default background break; } return true; }
Esta respuesta es bastante antigua, pero en caso de que alguien venga a buscar cómo hacer esto, aquí es cómo puede hacerlo. @Shadesblade estaba cerca, pero no completamente.
public boolean onTouch(View button, MotionEvent theMotion) { switch (theMotion.getAction()) { case MotionEvent.ACTION_DOWN: button.setPressed(true); break; case MotionEvent.ACTION_UP: button.setPressed(false); break; } return true; }
De esta manera puede utilizar un selector xml dibujable y aún alternar el estado con un listener de ontouch.
También asegúrese de que la vista "botón" es clicable (Clase del botón se puede hacer clic de forma predeterminada, pero si está usando algún otro punto de vista / viewgroup que hizo necesario para delcare esto en el xml).
Simplemente devuelva falso.
public boolean onTouch(View view, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { } else if (event.getAction() == MotionEvent.ACTION_UP) { } return false; }