Saya ingin menampilkan gambar GIF animasi dalam aplikasi saya. Seperti yang saya ketahui, sulitnya Android tidak mendukung animasi GIF secara asli.
Namun itu dapat menampilkan animasi menggunakan AnimationDrawable :
Kembangkan> Panduan> Gambar & Grafik> Gambaran Umum Drawables
Contoh ini menggunakan animasi yang disimpan sebagai bingkai dalam sumber daya aplikasi tetapi yang saya butuhkan adalah menampilkan animasi gif secara langsung.
Rencana saya adalah memecah animasi GIF ke bingkai dan menambahkan setiap bingkai sebagai dapat ditarik ke AnimationDrawable.
Adakah yang tahu cara mengekstrak bingkai dari animasi GIF dan mengonversinya masing-masing menjadi Drawable ?
java
android
animated-gif
Leonti
sumber
sumber
Jawaban:
Android sebenarnya bisa mendekode dan menampilkan animasi GIF, menggunakan kelas android.graphics.Movie.
Ini tidak terlalu banyak didokumentasikan, tetapi dalam Referensi SDK . Selain itu, digunakan dalam Sampel di ApiDemos dalam contoh BitmapDecode dengan beberapa bendera animasi.
sumber
setLayerType(LAYER_TYPE_SOFTWARE)
Anda. Tetapi masih hanya berfungsi untuk beberapa gif dan untuk beberapa perangkat.Paint p = new Paint(); p.setAntiAlias(true); setLayerType(LAYER_TYPE_SOFTWARE, p);
bekerja!MEMPERBARUI:
Gunakan glide:
pemakaian:
lihat dokumen
sumber
juga put (main / assets / htmls / name.gif) [dengan html ini sesuaikan dengan ukuran]
mendeklarasikan dalam Xml Anda misalnya seperti ini (main / res / layout / name.xml): [Anda menentukan ukuran, misalnya]
di Aktivitas Anda, letakkan kode berikutnya di dalam onCreate
jika Anda ingin memuat secara dinamis, Anda harus memuat tampilan web dengan data:
saran: lebih baik memuat gif dengan gambar statis untuk memeriksa informasi lebih lanjut https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
Itu saja, saya harap Anda membantu.
sumber
Saya memecahkan masalah dengan memecah animasi gif menjadi bingkai sebelum menyimpannya ke ponsel, jadi saya tidak harus menghadapinya di Android.
Lalu saya mengunduh setiap frame ke ponsel, membuat Drawable darinya dan kemudian membuat AnimationDrawable - sangat mirip dengan contoh dari pertanyaan saya
sumber
Saya menemukan cara yang sangat mudah, dengan contoh kerja yang bagus dan sederhana di sini
tampilkan widget animasi
Sebelum menjalankannya ada beberapa chages yang harus dilakukan dalam kode
BERIKUT INI
ganti saja
di
DAN MASUK
Berikan file animasi gif Anda sendiri
GANTI BARIS PERTAMA DI
sesuai dengan nama kelas ...
setelah melakukan perubahan kecil ini seharusnya berfungsi seperti untuk saya ...
semoga ini membantu
sumber
Cara untuk menampilkan GIF animasi di Android:
https://github.com/koral--/android-gif-drawable - decoder diimplementasikan dalam C, jadi sangat efisien.
https://code.google.com/p/giffiledecoder - decoder diimplementasikan di Java, jadi lebih mudah digunakan. Masih cukup efisien, bahkan dengan file besar.
Anda juga akan menemukan banyak perpustakaan berdasarkan kelas GifDecoder. Itu juga decoder berbasis Java, tetapi bekerja dengan memuat seluruh file ke dalam memori, jadi itu hanya berlaku untuk file kecil.
sumber
Saya sangat kesulitan memiliki animasi gif yang bekerja di Android. Saya hanya mengikuti dua pekerjaan:
WebView berfungsi dengan baik dan sangat mudah, tetapi masalahnya membuat tampilan lebih lambat dan aplikasi tidak responsif untuk satu detik atau lebih. Saya tidak suka itu. Jadi saya telah mencoba berbagai pendekatan (TIDAK BEKERJA):
Saya memiliki beberapa bolak-balik dengan
Ion
; Akhirnya, saya membuatnya bekerja, dan itu sangat cepat :-)sumber
Meluncur 4.6
1. Untuk Memuat gif
2. Untuk mendapatkan objek file
sumber
Glide
Perpustakaan Pemuat Gambar untuk Android, direkomendasikan oleh Google.
Apa yang dimiliki Glide tetapi Picasso tidak
Kemampuan memuat Animasi GIF ke ImageView sederhana mungkin merupakan fitur paling menarik dari Glide. Dan ya, Anda tidak dapat melakukannya dengan Picasso. Beberapa tautan penting -
sumber
Gunakan ImageViewEx , perpustakaan yang membuat penggunaan gif semudah menggunakan
ImageView
.sumber
Coba ini, di bawah ini kode menampilkan file gif di progressbar
loading_activity.xml (dalam folder Layout)
custom_loading.xml (dalam folder yang dapat digambar)
di sini saya meletakkan black_gif.gif (dalam folder yang dapat digambar), Anda dapat meletakkan gif Anda sendiri di sini
LoadingActivity.java (dalam folder res)
sumber
Tidak ada yang menyebutkan perpustakaan Ion atau Glide . mereka bekerja dengan sangat baik.
Lebih mudah ditangani dibandingkan dengan WebView.
sumber
Saya telah berhasil dengan solusi yang diusulkan dalam artikel ini , sebuah kelas yang disebut
GifMovieView
, yang menjadikanView
yang kemudian dapat ditampilkan atau ditambahkan ke spesifikViewGroup
. Lihat metode lain yang disajikan dalam bagian 2 dan 3 dari artikel yang ditentukan.Satu-satunya kelemahan dari metode ini adalah bahwa antialiasing pada film tidak sebagus itu (harusnya merupakan efek samping dari penggunaan
Movie
Kelas Android "teduh" ). Anda kemudian lebih baik mengatur latar belakang ke warna solid dalam GIF animasi Anda.sumber
Beberapa pemikiran tentang contoh BitmapDecode ... Pada dasarnya ia menggunakan kelas Movie yang kuno, tetapi tidak memiliki fitur dari android.graphics. Pada versi API terbaru Anda perlu mematikan akselerasi perangkat keras, seperti dijelaskan di sini . Sebaliknya bagi saya itu segfaulting.
Berikut adalah contoh BitmapDecode yang dipersingkat dengan hanya bagian GIF. Anda harus membuat Widget Anda sendiri (Tampilan) dan menggambarnya sendiri. Tidak sekuat ImageView.
2 metode lain, satu dengan ImageView yang lain dengan WebView dapat ditemukan di tutorial ini . Metode ImageView menggunakan android-gifview berlisensi Apache dari Google Code.
sumber
@PointerNull memberikan solusi yang baik, tetapi tidak sempurna. Itu tidak bekerja pada beberapa perangkat dengan file besar dan menunjukkan animasi Gif kereta dengan bingkai delta pada versi pra ICS. Saya menemukan solusi tanpa bug ini. Ini adalah perpustakaan dengan decoding asli ke drawable: koral's android-gif-drawable .
sumber
Masukkan ke dalam WebView, itu harus dapat menampilkannya dengan benar, karena browser default mendukung file gif. (Froyo +, jika saya tidak salah)
sumber
Ada dua opsi untuk memuat animasi gif ke dalam aplikasi Android kami
1) Menggunakan Glide untuk memuat gif ke dalam
ImageView
.2) Menggunakan html untuk memuat gif ke dalam a
WebView
Buat html dengan alamat ke file .gif:
simpan file ini ke direktori aset:
Muat html ini ke dalam WebView aplikasi Anda:
Berikut ini adalah contoh lengkap dari dua opsi ini .
sumber
Hanya API Android (Pie Android) 28 dan +
gunakan AnimatedImageDrawable sebagaiKode XML, tambahkan ImageView
AnimatedImageDrawable
adalah anak Drawable dan dibuat olehImageDecoder.decodeDrawable
ImageDecoder.decodeDrawable
yang selanjutnya membutuhkan instance dari yangImageDecoder.Source
dibuat olehImageDecoder.createSource
.ImageDecoder.createSource
hanya dapat mengambil sumber sebagai nama, ByteBuffer, File, resourceId, URI, ContentResolver untuk membuat objek sumber dan menggunakannya untuk membuatAnimatedImageDrawable
sebagaiDrawable
(panggilan polimorfik)Catatan: Anda juga dapat membuat
Bitmap
menggunakan ImageDecoder # decodeBitmap .Keluaran:
AnimatedDrawable juga mendukung pengubahan ukuran, bingkai dan warna
sumber
Saya pikir perpustakaan yang lebih baik untuk menangani file gif adalah yang satu ini: oleh koral
Sudah menggunakannya dan saya berhasil dan perpustakaan ini didedikasikan untuk GIF; tetapi di mana sebagai picasso dan meluncur adalah kerangka gambar tujuan umum ; jadi saya pikir para pengembang perpustakaan ini sepenuhnya berkonsentrasi pada file gif
sumber
Gunakan fresco. Inilah cara melakukannya:
http://frescolib.org/docs/animations.html
Inilah repo dengan sampel:
https://github.com/facebook/fresco/tree/master/samples/animation
Waspadalah fresco tidak mendukung bungkus konten!
sumber
Hanya ingin menambahkan bahwa kelas Film sekarang sudah usang.
Disarankan untuk menggunakan ini
AnimatedImageDrawable
sumber
Buat paket bernama "Utils" di bawah folder src dan buat kelas bernama "GifImageView"
Sekarang tentukan GifImageView di MainActivity File: src / activity / MainActivity.class
Sekarang File Bagian UI: res / layout / activity_main.xml
Kode sumber: contoh Android
sumber
Pertama-tama peramban Android harus mendukung GIF Animasi. Jika tidak maka itu bug! Lihatlah pelacak masalah.
Jika Anda menampilkan GIF animasi ini di luar peramban, mungkin ini cerita yang berbeda. Untuk melakukan apa yang Anda minta akan membutuhkan perpustakaan eksternal yang mendukung decoding GIF Animasi.
Port of call pertama adalah melihat Java2D atau JAI (Java Advanced Imaging) API, meskipun saya akan sangat terkejut jika Android Dalvik akan mendukung perpustakaan-perpustakaan di App Anda.
sumber
Mirip dengan apa yang dikatakan @Leonti, tetapi dengan sedikit lebih dalam:
Apa yang saya lakukan untuk mengatasi masalah yang sama adalah membuka GIMP, menyembunyikan semua layer kecuali satu, mengekspornya sebagai gambar sendiri, dan kemudian menyembunyikan layer itu dan menyembunyikan yang berikutnya, dll., Sampai saya memiliki file sumber daya individual untuk masing-masing . Lalu saya bisa menggunakannya sebagai bingkai dalam file XML AnimationDrawable.
sumber
Saya memecahkan masalah ini dengan memisahkan gif dalam bingkai dan menggunakan animasi android standar
sumber
Sesuatu yang saya lakukan untuk menampilkan gif di aplikasi. Saya memperluas ImageView sehingga orang dapat menggunakan atributnya secara bebas. Itu dapat menampilkan gif dari url atau dari direktori aset. Perpustakaan juga memudahkan untuk memperluas kelas untuk mewarisi darinya dan memperluasnya untuk mendukung metode yang berbeda untuk menginisialisasi gif.
https://github.com/Gavras/GIFView
Ada sedikit panduan di halaman github.
Itu juga diterbitkan di Android Arsenal:
https://android-arsenal.com/details/1/4947
Gunakan contoh:
Dari XML:
Dalam kegiatan:
Mengatur gif secara terprogram:
sumber
Cara termudah - Dapat mempertimbangkan kode di bawah ini
Kita dapat memanfaatkan Imageview setImageResource, merujuk kode di bawah ini untuk hal yang sama.
Kode di bawah ini dapat digunakan untuk menampilkan gambar seperti gif incase jika Anda memiliki beberapa gambar split gif. Hanya membagi gif menjadi png individu dari alat online dan menempatkan gambar dalam gambar seperti urutan di bawah ini
image_1.png, image_2.png, dll.
Minta pawang untuk mengubah gambar secara dinamis.
sumber
Cara mudah untuk menampilkan GIF animasi langsung dari URL ke tata letak aplikasi Anda adalah dengan menggunakan kelas WebView.
Langkah 1: Di layout XML Anda
Langkah 2: Dalam Aktivitas Anda
Langkah 3: Di Manifest.XML Anda, buat izin Internet
Langkah 4: Jika Anda ingin membuat latar belakang GIF Anda transparan dan membuat GIF cocok dengan Tata Letak Anda
sumber
Anda dapat menggunakan pustaka GifAnimationDrawable yang ditemukan di tautan ini - https://github.com/Hipmob/gifanimateddrawable , dan yang mengonversi gif apa pun menjadi AnimationDrawable. Nikmati :)
sumber
sumber