2011-06-28 17 views
10

Con el selector de forma predeterminada, a largo presionando un elemento de la lista hace que su fondo para la transición entre dos colores.Android: ¿Cómo lograr el efecto de brillo cuando se presiona largamente un elemento de la lista?

Sustitución del selector con la de abajo elimina el efecto. De acuerdo con this question, necesito una animación para reproducirlo. ¿Cómo voy a hacer eso en xml?

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_pressed="true"> 
     <shape> 
      <solid 
       android:color="@color/state_pressed" /> 
     </shape> 
    </item> 
    <item 
     android:state_focused="true"> 
     <shape> 
      <solid 
       android:color="@color/state_focused" /> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <solid 
       android:color="@color/state_idle_grey" /> 
     </shape> 
    </item> 
</selector> 

Respuesta

9

Este es el código de list_selector_background:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_window_focused="false" android:drawable="@android:color/transparent" /> 
     <!-- 
       Even though these two point to the same resource, have two states so 
       the drawable will invalidate itself when coming out of pressed state. 
     --> 
     <item android:state_focused="true" android:state_enabled="false" 
       android:state_pressed="true"  android:drawable="@drawable/list_selector_background_disabled" /> 
     <item android:state_focused="true" android:state_enabled="false" 
       android:drawable="@drawable/list_selector_background_disabled" /> 
     <item android:state_focused="true" android:state_pressed="true" 
       android:drawable="@drawable/list_selector_background_transition" /> 
     <item android:state_focused="false" android:state_pressed="true" 
       android:drawable="@drawable/list_selector_background_transition" /> 
     <item android:state_focused="true" 
       android:drawable="@+drawable/list_selector_background_focus" /> 
</selector> 

Encontrado on the web.

Y utiliza esta transición por los clics pulsación larga:

<transition xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/list_selector_background_pressed" /> 
    <item android:drawable="@drawable/list_selector_background_longpress" /> 
</transition> 

Encontrado on the web too.

no hay animación para eso. Y recuerde mantener sus estados en el mismo orden, o al menos pensar en ello si los intercambia, el orden es importante.

Personalmente, me gusta cuando las cosas se comportan de una manera estándar, por lo que sería simplemente dejar que el selector de lista estándar.

Saludos, Stéphane

+0

Gracias, eso es excelente. –

+2

no funciona para más ideas ¿por qué? He aplicado la transición como usted ha dicho, que quería decir que para el archivo "list_selector_background_transition.xml" añadimos la transición que le dio en el segundo bloque de código? Hice eso exactamente, pero sólo un color se chaged que es de sólo "list_selector_background_pressed" se aplica – coderVishal

+0

@coderVishal ¿Utiliza un 'RecyclerView'? ** Esta solución solo funciona si usa una subclase de 'AbsListView' ** (por ejemplo, ListView). Comprueba si el fondo del elemento tiene un 'TransitionDrawable' e inicia la animación. Desafortunadamente, este no es el caso con 'RecyclerView', tendrás que inventar algún mecanismo para comenzar la animación tú mismo. – Malcolm

Cuestiones relacionadas