2010-04-16 12 views
7

Cómo hacer que el botón muestre que se hace clic (al establecerlo baje/algunos cambios) para los botones que usan imagen de fondo personalizada en Android. No quiero incluir más imágenes y configurar diferentes para diferentes estados como se muestra en el ejemplo de google hello views. Gracias.Cómo hacer que el botón con imagen de fondo personalizada muestre la animación de clic en Android

+0

¿Qué quiere decir con no tener una imagen diferente para cada estado? ¿Desea tener una imagen que su aplicación modifique cada vez, como cambiar su color? –

+0

Sí, me refiero solo para informar al usuario que el botón está presionado (como mostrarlo hacia abajo, o como desmayar el fondo como en Iphone). ¿Por qué Android no proporciona una forma para una tarea tan común sin utilizar imágenes adicionales? – Pritam

+0

no me han escuchado acerca del ejemplo de google views. ¿Dónde está? – Praveen

Respuesta

2

Es posible hacerlo con solo un archivo de imagen utilizando el método ColorFilter. Sin embargo, ColorFilter espera trabajar con ImageViews y no con Buttons, por lo que debe transformar sus botones en ImageViews. Esto no es un problema si está usando imágenes como botones de todos modos, pero es más molesto si tiene texto ... De todos modos, suponiendo que encuentre una forma de resolver el problema con el texto, aquí está el código para usar:

ImageView button = (ImageView) findViewById(R.id.button); 
button.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY); 

Aplica una superposición roja al botón (el código de color es el código hexadecimal para el rojo totalmente opaco; los primeros dos dígitos son transparencia, luego es RR GG BB).

Usted puede hacer sus ImageViews ven como botones normales copiando el archivo desde su btn_default_normal.9.png sdkfolder/plataformas/(versión Android/data/res/estirable para su propio proyecto. Luego, en su uso ImageView android:background="@drawable/btn_normal_default" y android:src="..." para establecer una imagen dentro del botón

+0

Puede hacer esto con Text this.btnLeaderboard.setTextColor (Color.parseColor (# 362D26)); –

12

tienes que usar dos imágenes para hacer esto.

  1. button_normal
  2. button_pressed

continuación, crear un recurso XML en la carpeta dibujable

<?xml version="1.0" encoding="UTF-8"?> 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_pressed="false" 
    android:drawable="@drawable/button_normal" /> 

<item android:state_pressed="true" 
    android:drawable="@drawable/button_pressed" /> 

</selector> 

a continuación, establezca este archivo como un fondo para el imageview. aquí estamos usando imageview como botón. no te olvides de incluir esos dos botones en la carpeta dibujable. Eso es.

+2

Gracias por su respuesta, pero como ya mencioné, esta solución requiere 2 drawable (drawable/button_normal y drawable/button_pressed) y quiero evitar extraíbles para diferentes estados de botón en mi aplicación, ya que hay muchos botones diferentes. Mi propósito es solo darle al usuario un comentario del botón presionado. Hay algún trabajo alrededor ? – Pritam

1

Puede crear una imagen negra transparente simple y crear una lista de niveles dibujable mediante la cual puede colocar la imagen transparente sobre la imagen real. Esto le da un efecto de empujar hacia abajo. También puede utilizar esto como una imagen onclick como se muestra a continuación.

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true"> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:drawable="@drawable/image"> 
     </item> 
     <item android:drawable="@drawable/transparent_image"> 
     </item> 
    </layer-list> 
</item> 
<item android:drawable="@drawable/image"></item> 
</selector> 
0

solo quiero agregar otra forma fácil de hacerlo: Si su ImageButton permanece en segundo plano y no lo establece en nulo, funcionará como un botón normal y mostrará la animación de clic mientras hace clic exactamente igual que otros botones. El camino para ocultar el fondo, mientras que todavía está ahí:

<ImageButton 
    android:id="@+id/imageButton2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="1dp" 
    android:paddingLeft="1dp" 
    android:paddingRight="1dp" 
    android:paddingTop="1dp" 
    android:src="@drawable/squareicon" /> 

los rellenos no permitirá que el fondo sea visible y hacer que el botón de actuar como otros botones.

Cuestiones relacionadas