2014-12-10 9 views
6

Mam rippleDrawable że używam jako tło dla LinearLayout:odzew nie występujące, gdy również używając makeSceneTransitionAnimation

<LinearLayout 
    android:id="@+id/card_layout" 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:layout_alignParentBottom="true" 
    android:clickable="true" 
    android:background="@drawable/ripple" 
    android:orientation="vertical" > 

chcę rozpocząć nową działalność onClick układu. Kiedy robię po prostu funkcję startActivity(), efekt ripple działa dobrze - widać, że występuje większość efektów marszczenia, a następnie wyświetlany jest nowy ekran.

Jeśli jednak uruchomię działanie za pomocą funkcji ActivityOptionsCompat.makeSceneTransitionAnimation, efekt tętnienia nie pojawi się po dotknięciu układu. Uwaga, długie naciśnięcie nadal pokazuje tętnienie w tym przypadku.

Próbowałem tego również na przycisku i zobaczyłem ten sam wynik.

To tak, jakby makeSceneTransitionAnimation działo się zbyt szybko lub przesłonił efekt marszczenia. Chciałbym, żeby marsz skończył się lub przynajmniej zobaczył go przed animacją przejścia sceny. Nie jestem pewien, czy ma to związek z ripple i przejściem konkurującym o wątek renderowania?

Próbowałem wywoływać odkładanieWejścia na pobraną aktywność. Ale to nie zadziałało - wywoływane działanie wciąż od razu się wyświetla, a potem przejście jest odkładane, dopóki nie uruchomisz go ponownie.

Ktoś ma jakieś pomysły na temat tego, co mogę zrobić źle?

Używam API 21 (bez AppCompat). Z góry dziękuję za pomoc.

+1

Czy udało Ci się to jakoś obejść? –

+0

@ Christ Noordvik Nie, jeszcze nie znalazłem rozwiązania. – Scott

+0

Mam ten sam problem przy użyciu AppCompat. – sidecarcat

Odpowiedz

4

Nie 100% pewien jestem odpowiadając na pytanie, ale miałem problem, który brzmi podobnie ze skutkiem tętnienia nie kończąc kiedy rozpocząć nową działalność, więc skończyło się za pomocą modułu obsługi z opóźnieniem w OnClickListener:

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     startActivity(intent); 
    } 
}, 150); 
+0

Dzięki timothyjc. Próbowałem tego z opóźnieniem 150, ale często prowadzi to do płynnego przejścia, wyraźnie widać stop po 150 przez większość czasu. To ciekawe, ale gdy ustawię opóźnienie na 0, przejście jest płynniejsze i często widzę niektóre lub wszystkie tętnienia. Bez obsługi przejście jest płynne, ale rzadko widzę tętnienie. – Scott

+0

Mam ten sam problem – jiawen

+0

Zrobić 200 i działa dobrze. Dzięki! – stef

Powiązane problemy