2010-07-29 27 views
32

Czekam na tworzenie widgetu, który obsługuje animację, najlepiej za pośrednictwem platformy android.view.animation, w przeciwnym razie ustawiając właściwości na widokach zdalnych w kodzie wyzwolonym z usługi w tle.Animowane widgety ekranu głównego Android

Czy ktoś ma jakiekolwiek doświadczenie z którymkolwiek z tych podejść i czy staram się go wykonać, czy też kierujemy się w ślepy zaułek?

+0

Patrząc w ten sam , gdybyś już to zrobił, byłoby miło, gdybyś mógł podzielić się swoim rozwiązaniem tutaj. – Bachi

+1

Pewnie - spróbuje znaleźć czas, aby to zapisać. Zasadniczo chodzi o to, aby zdefiniować układy, w których wbudowane są początkowe animacje, a następnie ustawić te układy, gdy wymagane są animacje. IIRC musisz przejść do nowego układu, aby uruchomić animację, więc możesz potrzebować wielu układów z tą samą animacją i na przemian z nimi. Przydaje się ustawienie timera, aby wrócić do nie-animowanej wersji widżetu po zakończeniu animacji - w przeciwnym razie powrót do ekranu głównego może ponownie uruchomić animację. – Adrian

+0

, którą z nich chcesz kontrolować za pomocą usługi w tle, układu lub animacji? Czy mógłbyś szczegółowo opisać to pytanie? – MoiTempete

Odpowiedz

12

to rzeczywiście możliwe do animowania widgety RemoteView. Problem polega na tym, że jest on bardzo restrykcyjny, co wynika z wpływu bezpieczeństwa na uruchamianie niestandardowego kodu w procesie systemowym.

Mam na myśli to, że Android będzie działał tylko z animacjami, które są wyrażone w plikach res/anim xml, które są powiązane z układami za pomocą xml. Niektóre widżety RemoteView obsługują ten

Przykładem tego jest widget aplikacji Wiadomości i pogoda, który jest dostępny w systemie Android. Robi to za pomocą ViewFlipper, aby przeglądać każdą historię co 10 sekund.

<ViewFlipper android:layout_width="match_parent" android:layout_height="wrap_content" android:measureAllChildren="true" android:flipInterval="10000" android:autoStart="true" 
android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" android:animateFirstView="true"> 
     <TextView android:id="@+id/Description1TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description2TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description3TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description4TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
    </ViewFlipper> 

W tym przykładzie można związać oczekujących zamiary każdego TextView. Tak więc, gdy użytkownik kliknie, może nastąpić inna akcja.

Wreszcie, Android powoli dodawał obsługę animowanych widoków w każdej wersji. Na przykład TransitionDrawables (cross shining selector drawable) nie przechodzą cross-fade aż do wersji Android 3.0.

2

Ty możliwe, Mają tylko proste animacje, takie jak fadeIn lub fadeOut na swoim widżecie, to bardzo proste, nie potrzebujesz żadnych animacji układu, po prostu skorzystaj z ViewFlipper (zajęło mi 3 dni śledztwa, aby dowiedzieć się, że to takie proste).

Mimo to imposiible napisać coś naprawdę wielkiego bez używania niestandardowych wyrzutnie

2

Jest to możliwe, ale używaj go ostrożnie, ponieważ jest bardzo ciężki dla domyślnej implementacji ekranu głównego i nie powinieneś go używać zbyt często.

W Mario Coin Block widget używam takiej techniki, aby zrobić animację, można kasie kod źródłowy: http://code.google.com/p/mario-coin-block/source/browse/trunk/MarioWidget.CoinBlock/src/com/gueei/mario/coinBlock/view/CoinBlockView.java

Zasadniczo pomysł jest ręcznie rysować na niewidocznej Bitmap i zastąpić bitmapy BitmapView jest z nim za pomocą RemoveViews Połączenie.

1

Zgadzam się z innymi odpowiedziami tutaj, więc nie będę powtórnie powtarzać - ograniczona animacja na widgecie jest możliwa, ale przy dużych zasobach może spowolnić i spowolnić ekran główny, a także osuszacz baterii. Z mojego doświadczenia - nie działa płynnie. Najważniejsze jest - w porządku, jeśli od czasu do czasu zmienia się tylko kilka ramek, lub w przypadku niektórych efektów rzadko po zdarzeniu (np. Naciśnięcie użytkownika lub jakieś zdarzenie z usługi)

Ale jest pomysł, który prawdopodobnie nie odpowiada bezpośrednio na twoje pytanie, ale może być odpowiednią alternatywą (nie znam twojego przypadku użycia, może to być w ogóle nieistotne) Czy rozważałeś wdrożenie tapety na żywo?

plusy - najwyższa animacji jakości, mogą być sterowane z tła

minusy - nie interaktywne, zastępuje tapetę użytkownika ... i trudno zaspokoić każdy gust

Powiązane problemy