Chcę wyświetlać animowane obrazy GIF w mojej aplikacji. Jak się przekonałem, Android nie obsługuje natywnie animowanego GIF-a.
Może jednak wyświetlać animacje za pomocą AnimationDrawable :
Rozwijaj> Przewodniki> Obrazy i grafika> Przegląd Drawables
W przykładzie użyto animacji zapisanej jako ramki w zasobach aplikacji, ale potrzebuję bezpośrednio wyświetlić animowany gif.
Mój plan polega na rozbiciu animowanego GIF-a na ramki i dodawaniu każdej ramki jako animowalnej do AnimationDrawable.
Czy ktoś wie, jak wyodrębnić ramki z animowanego GIF-a i przekonwertować każdą z nich na Drawable ?
java
android
animated-gif
Leonti
źródło
źródło
Odpowiedzi:
Android może dekodować i wyświetlać animowane pliki GIF, korzystając z klasy android.graphics.Movie.
Nie jest to zbytnio udokumentowane, ale znajduje się w Odniesieniu do SDK . Ponadto jest on używany w przykładach w ApiDemos w przykładzie BitmapDecode z pewną animowaną flagą.
źródło
setLayerType(LAYER_TYPE_SOFTWARE)
na swoim View. Ale nadal działa tylko w przypadku niektórych gifów i niektórych urządzeń.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
pracował!AKTUALIZACJA:
Użyj poślizgu:
stosowanie:
zobacz dokumenty
źródło
umieść także (main / asset / htmls / name.gif) [z tym HTML dostosuj do rozmiaru]
zadeklaruj w swoim Xml na przykład w ten sposób (main / res / layout / name.xml): [na przykład określasz rozmiar]
w swoim działaniu umieść następny kod wewnątrz onCreate
jeśli chcesz ładować dynamicznie, musisz załadować widok z danymi:
sugestia: lepiej załadować gif ze statycznymi obrazami, aby uzyskać więcej informacji, sprawdź https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
To wszystko, mam nadzieję, że pomożesz.
źródło
Rozwiązałem problem, dzieląc animacje gif na ramki przed zapisaniem ich na telefonie, więc nie musiałbym sobie z tym poradzić w Androidzie.
Następnie pobieram każdą ramkę na telefon, tworzę z niej Drawable, a następnie tworzę AnimationDrawable - bardzo podobny do przykładu z mojego pytania
źródło
znalazłem bardzo łatwy sposób, z ładnym i prostym przykładem działania tutaj
wyświetlać animowany widżet
Zanim zacznie działać, należy wykonać kilka czynności w kodzie
W NASTĘPUJĄCYM
po prostu wymień
w
I W
Podaj własny plik animacji gif
WYMIENIĆ PIERWSZĄ LINIĘ W
zgodnie z nazwą klasy ...
po tych drobnych zmianach powinno działać jak dla mnie ...
Mam nadzieję, że to pomoże
źródło
Sposoby wyświetlania animowanego GIF-a na Androidzie:
https://github.com/koral--/android-gif-drawable - dekoder jest zaimplementowany w C, więc jest bardzo wydajny.
https://code.google.com/p/giffiledecoder - dekoder jest zaimplementowany w Javie, więc łatwiej jest z nim pracować. Nadal dość wydajny, nawet przy dużych plikach.
Znajdziesz również wiele bibliotek opartych na klasie GifDecoder. Jest to również dekoder oparty na Javie, ale działa poprzez ładowanie całego pliku do pamięci, więc ma zastosowanie tylko do małych plików.
źródło
Bardzo ciężko mi było mieć animowany gif działający w systemie Android. Miałem tylko dwa następujące działania:
WebView działa OK i jest naprawdę łatwy, ale problem polega na tym, że widok ładuje się wolniej, a aplikacja nie reaguje przez sekundę. Nie podobało mi się to. Więc wypróbowałem różne podejścia (NIE DZIAŁAŁO):
Miałem trochę tam iz powrotem
Ion
; Wreszcie mam działającą i jest naprawdę szybka :-)źródło
Szybkość 4.6
1. Aby załadować gif
2. Aby uzyskać obiekt pliku
źródło
Glide
Biblioteka Image Loader dla Androida, zalecana przez Google.
To, co ma Glide, ale nie Picasso
Możliwość załadowania animacji GIF do prostego ImageView może być najciekawszą funkcją Glide. I tak, nie możesz tego zrobić za pomocą Picassa. Kilka ważnych linków
źródło
Użyj ImageViewEx , biblioteki, która sprawia, że korzystanie z gif jest tak proste, jak korzystanie z
ImageView
.źródło
Spróbuj tego, poniżej wyświetlaj kod gif w pasku postępu
loading_activity.xml (w folderze Layout)
custom_loading.xml (w folderze wysuwnym)
tutaj umieszczam black_gif.gif (w folderze z możliwością rysowania), możesz tutaj umieścić swój własny gif
ŁadowanieActivity.java (w folderze res)
źródło
Nikt nie wspomniał o bibliotece Ion ani Glide . działają bardzo dobrze.
Jest łatwiejszy w obsłudze w porównaniu do WebView.
źródło
Odniosłem sukces dzięki rozwiązaniu zaproponowanemu w tym artykule , zwanej klasą
GifMovieView
, która renderuje,View
którą można następnie wyświetlić lub dodać do określonegoViewGroup
. Sprawdź inne metody przedstawione w częściach 2 i 3 określonego artykułu.Jedyną wadą tej metody jest to, że antyaliasing w filmie nie jest tak dobry (musi to być efekt uboczny korzystania z „podejrzanej”
Movie
klasy Androida ). Lepiej jest wtedy ustawić tło na jednolity kolor w animowanym pliku GIF.źródło
Kilka przemyśleń na temat BitmapDecode ... Zasadniczo wykorzystuje on starożytną, ale raczej pozbawioną cech klasę Movie z android.graphics. W najnowszych wersjach API musisz wyłączyć przyspieszenie sprzętowe, jak opisano tutaj . W przeciwnym razie było to dla mnie dziwne.
Oto przykład BitmapDecode skrócony tylko o część GIF. Musisz stworzyć swój własny widżet (Widok) i narysować go sam. Nie tak potężny jak ImageView.
W tym świetnym samouczku można znaleźć 2 inne metody, jedną z ImageView, drugą z WebView . Metoda ImageView wykorzystuje gifview na licencji Apache z Google Code.
źródło
@PointerNull dał dobre rozwiązanie, ale nie jest idealne. Nie działa na niektórych urządzeniach z dużymi plikami i wyświetla wadliwą animację Gif z ramkami delta w wersji wcześniejszej niż ICS. Znalazłem rozwiązanie bez tych błędów. Jest biblioteką z natywnym dekodowaniem do rysowania: koral-android-gif-drawable .
źródło
Umieść go w WebView, musi być w stanie wyświetlać go poprawnie, ponieważ domyślna przeglądarka obsługuje pliki gif. (Froyo +, jeśli się nie mylę)
źródło
Istnieją dwie opcje ładowania animowanych gifów do naszych aplikacji na Androida
1) Za pomocą Glide załaduj gif do pliku
ImageView
.2) Za pomocą html załadować gif do pliku
WebView
Utwórz plik HTML z adresem do pliku .gif:
zapisz ten plik w katalogu zasobów:
Załaduj ten HTML do WebView aplikacji:
Oto pełny przykład tych dwóch opcji .
źródło
Tylko dla Androida API (Android Pie) 28 i +
użyj AnimatedImageDrawable jakoKod XML, dodaj ImageView
AnimatedImageDrawable
jest dzieckiem Drawable i stworzonym przezImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
co dodatkowo wymagało wystąpieniaImageDecoder.Source
utworzonego przezImageDecoder.createSource
.ImageDecoder.createSource
może pobierać źródło tylko jako nazwę, ByteBuffer, Plik, ID zasobu, URI, ContentResolver, aby utworzyć obiekt źródłowy i używa go do utworzeniaAnimatedImageDrawable
jakoDrawable
(wywołanie polimorficzne)Uwaga: Można również utworzyć
Bitmap
za pomocą ImageDecoder # decodeBitmap .Wynik:
AnimatedDrawable obsługuje również zmianę rozmiaru, manipulowanie ramkami i kolorami
źródło
Myślę, że lepszą biblioteką do obsługi plików gif jest ta: autor koral
Użyłem go i odnoszę sukces, a ta biblioteka jest poświęcona GIF'om; ale gdzie jako picasso i szybowanie są ramami ogólnego zastosowania ; więc myślę, że twórcy tej biblioteki całkowicie skoncentrowali się na plikach gif
źródło
Użyj fresku. Oto jak to zrobić:
http://frescolib.org/docs/animations.html
Oto repozytorium z próbką:
https://github.com/facebook/fresco/tree/master/samples/animation
Uwaga, fresk nie obsługuje zawartości opakowania!
źródło
Chciałem tylko dodać, że klasa Movie jest teraz przestarzała.
Zalecane jest użycie tego
AnimatedImageDrawable
źródło
Utwórz pakiet o nazwie „Utils” w folderze src i utwórz klasę o nazwie „GifImageView”
Teraz zdefiniuj GifImageView w pliku MainActivity: src / activity / MainActivity.class
Teraz plik części interfejsu użytkownika: res / layout / activity_main.xml
Kod zasobu: przykład Androida
źródło
Przede wszystkim przeglądarka Android powinna obsługiwać animowane pliki GIF. Jeśli nie, to jest to błąd! Zobacz narzędzia do śledzenia problemów.
Jeśli wyświetlasz te animowane pliki GIF poza przeglądarką, może to być inna historia. Aby zrobić to, o co prosisz, potrzebna będzie zewnętrzna biblioteka, która obsługuje dekodowanie animowanych GIF-ów.
Pierwszym wywołaniem byłoby przyjrzenie się interfejsowi API Java2D lub JAI (Java Advanced Imaging), chociaż byłbym bardzo zaskoczony, gdyby system Android Dalvik obsługiwał te biblioteki w Twojej aplikacji.
źródło
Podobne do tego, co powiedział @Leonti, ale z nieco większą głębią:
Aby rozwiązać ten sam problem, otworzyłem GIMP, ukryłem wszystkie warstwy z wyjątkiem jednej, wyeksportowałem jako własny obraz, a następnie ukryłem tę warstwę i odkryłem następną itd., Dopóki nie miałem osobnych plików zasobów dla każdego . Następnie mógłbym użyć ich jako ramek w pliku XML AnimationDrawable.
źródło
Rozwiązałem to, dzieląc gif na ramki i używając standardowej animacji Androida
źródło
Coś, co zrobiłem, aby wyświetlać gify w aplikacjach. Rozszerzyłem ImageView, aby ludzie mogli swobodnie korzystać z jego atrybutów. Może wyświetlać gify z adresu URL lub z katalogu zasobów. Biblioteka ułatwia także rozszerzanie klas na dziedziczenie po niej i rozszerzanie jej o obsługę różnych metod inicjowania gif.
https://github.com/Gavras/GIFView
Na stronie github znajduje się mały przewodnik.
Został również opublikowany na Android Arsenal:
https://android-arsenal.com/details/1/4947
Użyj przykładu:
Z XML:
W działalności:
Programowe ustawianie gif:
źródło
Najłatwiejszy sposób - można rozważyć poniższy kod
Możemy skorzystać z Imageview setImageResource, zapoznaj się z poniższym kodem.
Poniższy kod może być użyty do pokazania obrazu jak gif incase, jeśli masz wielokrotny podzielony obraz gif. Po prostu podziel gif na pojedyncze png z narzędzia online i umieść obraz w rysunku, jak w poniższej kolejności
image_1.png, image_2.png itp.
Poproś program obsługi o dynamiczną zmianę obrazu.
źródło
Prostym sposobem wyświetlania animowanego GIF bezpośrednio z adresu URL do układu aplikacji jest użycie klasy WebView.
Krok 1: W układzie XML
Krok 2: W swojej działalności
Krok 3: W swoim pliku Manifest.XML dokonaj pozwolenia na dostęp do Internetu
Krok 4: Jeśli chcesz ustawić przezroczystość tła GIF i dopasować GIF do swojego układu
źródło
Możesz użyć biblioteki GifAnimationDrawable znalezionej w tym linku - https://github.com/Hipmob/gifanimateddrawable i która przekonwertuje dowolny gif na AnimationDrawable. Cieszyć się :)
źródło
źródło