Как оживить .gif изображения в Android?

Вот код для xml:

<ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/minepic" /> 

Здесь мина является gif-анимированным изображением, но после запуска приложения его просто отображается статическое изображение.

Есть ли какое-либо решение о том, как анимировать изображения .gif в приложении Android?

Solutions Collecting From Web of "Как оживить .gif изображения в Android?"

Чтобы дать точный и полный ответ, вот что вам нужно сделать шаг за шагом:

  1. Вам нужно будет иметь разные .png изображения, которые будут выступать в качестве фреймов для вашей анимации. Сохраните их в папке res/drawable .

  2. Создайте файл anim.xml папке res/drawable со следующим содержимым:

     <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/image_3" android:duration="250" /> <item android:drawable="@drawable/image_2" android:duration="250" /> <item android:drawable="@drawable/image_1" android:duration="250" /> <item android:drawable="@drawable/image" android:duration="250" /> </animation-list> 
  3. В xml файле макета, внутри которого вы хотите показать анимацию:

     //... <ImageView android:id="@+id/iv_animation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:contentDescription="Animation" /> //... 
  4. В файле Java, который загружает XML-файл макета и вызывает setContentView :

     //... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView animImageView = (ImageView) findViewById(R.id.iv_animation); animImageView.setBackgroundResource(R.drawable.anim); animImageView.post(new Runnable() { @Override public void run() { AnimationDrawable frameAnimation = (AnimationDrawable) animImageView.getBackground(); frameAnimation.start(); } }); // ... other code ... } // ... 

Чтобы остановить анимацию, вы можете вызвать .stop() в AnimationDrawable . Для получения дополнительной информации о доступных методах вы можете увидеть документацию AnimationDrawable . Надеюсь, это поможет кому-то.

Я бы не рекомендовал использовать классы Movie или WebView но ImageView вместо этого с исходным чертежом, установленным в animation-list . Посмотрите пример ( mydrawable.xml ):

 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/image_1" android:duration="100" /> <item android:drawable="@drawable/image_2" android:duration="100" /> <item android:drawable="@drawable/image_3" android:duration="100" /> </animation-list> // in your layout : <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/my_drawable" /> 

Очевидно, что вы должны нарезать свой .gif на отдельные изображения перед использованием этого решения.

Насколько я понимаю, ваш GIF-образ не движется, так что это обычное поведение Android, если вы рассматриваете GIF как статичное изображение. Для меня лучшим решением (не изобретать колесо!) Была библиотека с открытым исходным кодом gitDrawable . Проверьте их README, все очень просто: добавьте зависимость от градиента и использования (в XML или коде). Пример использования в Java:

 GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim ); 
 And i think this is the one way of solution by writing the anim-space.xml In which the slices of the image are added to the items one by one and setting that xml to the imageview of our layout xml. 

http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html

В этой ссылке разработчиков она четко определена.

Ну, я смог анимировать изображения андроида с помощью этого простого кода:

 canvas.drawColor(Color.WHITE); super.onDraw(canvas); long now=android.os.SystemClock.uptimeMillis(); System.out.println("now="+now); if (moviestart == 0) { // first time moviestart = now; } System.out.println("\tmoviestart="+moviestart); int relTime = (int)((now - moviestart) % movie.duration()) ; System.out.println("time="+relTime+"\treltime="+movie.duration()); movie.setTime(relTime); movie.draw(canvas,this.getWidth()/2-20,this.getHeight()/2-40); this.invalidate(); } 

Он был легко реализован с использованием movieview

Или я могу дать вам учебник для этого материала

Неправильная практика использования Threads (т.е. View.post (new Runnable)), потому что представление могло измениться за время, когда чертеж будет окрашен (в одном случае используется анимированное изображение в ListView с элементами, содержащими разные фоновые изображения) , Что может вызвать ClassCastException, если ImageView, к моменту запуска потока, имеет фон, который не является анимированным ресурсом.

 ImageView loadingImg = (ImageView)v.findViewById(R.id.image); loadingImg.setBackgroundResource(R.drawable.progressdialog); loadingImg.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { AnimationDrawable loadingAnimation = (AnimationDrawable) v.getBackground(); loadingAnimation.start(); } @Override public void onViewDetachedFromWindow(View v) { } }); 

Пример, показанный здесь