如何动画.gif图片在Android?(How to animate .gif images in

2019-07-20 08:29发布

下面是XML的代码:

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

在这里,minepic是一个GIF动画图像,但运行的应用程序后,它只是显示静态图像。

是否有关于如何在动画android应用的.gif图片的任何解决方案?

Answer 1:

为了让这里精确和完整的答案是你需要做逐步的东西:

  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. 在它装载布局xml文件并调用Java文件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文档。 希望它可以帮助别人。



Answer 2:

我不建议使用MovieWebView类,但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注意单独的图像。



Answer 3:

据我了解,你的GIF图片是不动的,所以这是原生的Android的行为,如果你把GIF就像一个静态图片。 对我来说,最好的解决办法(不是推倒重来!)是开源库gitDrawable 。 检查他们的自述,一切都非常简单:添加依赖关系摇篮和使用(XML或代码)。 在Java中使用示例:

GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim );


Answer 4:

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

在这个开发商将其链接被明确定义。



Answer 5:

嗯,我能使用动画这个简单的代码的Android图片:

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容易实现

或者我,我可以给你一个教程这个东西



Answer 6:

这不是要使用的线程(即View.post(新的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) {
  }
});

所示实施例在这里



文章来源: How to animate .gif images in an android?