2014-12-13 16 views
13

Zdefiniowałem ripple drawable i ustawiłem go jako tło dla tła widoku widoku listview. To prawie działa dobrze, ale efekt marszczenia czasami nie pojawia się po naciśnięciu.Efekt ripple nie pojawia się czasami

Oto tętnienia kod odkształcalne:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="?android:attr/colorControlHighlight"> 
    <item> 
     <selector> 
      <item android:state_activated="true"> 
       <shape><solid android:color="?android:attr/colorButtonNormal"/> 
       </shape> 
      </item> 

      <item> 
       <shape><solid android:color="@android:color/transparent"/> 
       </shape> 
      </item> 
     </selector> 
    </item> 
</ripple> 

I mam szufladę nawigacji, który wykorzystuje tę rozciągliwej jako tło dla elementów szuflady: Jednak

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/navigation_menu_height" 
    android:orientation="horizontal" 
    android:background="@drawable/listItemBackground"> 
    ....  
</RelativeLayout> 

za każdym razem, gdy otwieram aplikację , domyślny wybrany element nie pokazuje efektu tętnienia, kiedy go naciskam. Ale po wybraniu innego elementu, a następnie wybraniu go ponownie, wszystko po prostu idzie dobrze.

Używam dokładnie tego samego dla innego prawie tego samego ListView, z wyjątkiem trybu wyboru jest wiele. Tym razem przedmioty nie będą pokazywały efektu marszczenia po naciśnięciu tak długo, jak zostaną wybrane.

W innej liście Widok, który nie określa trybu wyboru, tylko pierwszy element pokazuje efekt ripple, a inne zachowują się tak samo, jak w niższych wersjach systemu Android.

Naprawdę nie mam pojęcia, jak mogę sprawić, aby działało we wszystkich scenariuszach. może to naprawdę dotyczy trybu wyboru ListView?

==== EDIT ====

Właśnie dodałem drawSelectorOnTop nieruchomość dla wszystkich tych trzech listViews a teraz pierwsze dwa problemy są usuwane. Jednak po trzecie, teraz wygląda następująco:

Efekt falowania działa dobrze na wszystkich elementach oprócz pierwszego, który pokazuje dwie fale! Jeden z nich zaczyna się od miejsca, w którym mój palec naciska, podczas gdy drugi zawsze zaczyna się od środka!

==== Edycja ponownie ==== OK, teraz dostosować rozciągliwej przenieść status aktywnego poza tętnienia węzła wraz z atrybutem drawSelectorOnTop dla ListView, problem jest teraz całkowicie zniknęły.

+2

Patrzę na twoją drugą edycję - jeśli wymyśliłeś rozwiązanie i naprawiłeś je, proszę napisać to jako szczegółową odpowiedź i oznaczyć je jako poprawne. Może pomóc komuś w drodze. –

Odpowiedz

6

OK, po kilku próbach i błędach w końcu udało mi się to wykonać.

Najpierw przenieść stanie aktywnym z tętnienia węzła:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true"> 
     <shape> 
      <solid android:color="?android:attr/colorButtonNormal"/> 
     </shape> 
    </item> 
    <item> 
     <ripple android:color="?android:attr/colorControlHighlight"> 
      <item> 
       <shape> 
        <solid android:color="@android:color/transparent"/> 
       </shape> 
      </item> 
     </ripple> 
    </item> 
</selector> 

Po tym okresie, zestaw drawSelectorOnTop true dla ListView, które korzystają z rozciągliwej jako element tła.

Teraz efekt marszczenia może działać idealnie.

0

W moim przypadku efekt marszczenia działa po pierwszym kliknięciu, ale dla pierwszego kliknięcia to nie zadziałało. Zmieniono plik selektora tła z android: state_activated = "true" oraz w main.xml android: clickable = "true" to działa dobrze dla wszystkich czasów.

selector.xml (w rez \ rozciągliwej \ selector.xml)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_activated="true" android:drawable="@drawable/card_bg_pressed" android:state_enabled="true" android:state_pressed="true"/> 
<item android:state_activated="true" android:drawable="@drawable/card_bg_focused" android:state_enabled="true" android:state_focused="true"/> 
<item android:state_activated="true" android:drawable="@drawable/card_bg_selected" android:state_enabled="false" android:state_selected="true"/> 
</selector> 

W activity_main.xml

<com.mysample.RecyclingImageView 
    android:id="@+id/imageview_overlay" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:background="@drawable/selector" 
    android:clickable="true" />