以下是xml的代码:
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/minepic" />
这里的minepic是一个gif动画图像,但在运行应用程序后它只显示一个静态图像。
有没有关于如何在Android应用程序中设置.gif图像动画的解决方案?
答案 0 :(得分:35)
在这里给出一个精确而完整的答案是你需要逐步做到的:
您需要使用不同的.png
图像
动画的帧。将它们保存在res/drawable
文件夹中。
在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>
在要显示动画的布局xml
文件中:
//...
<ImageView
android:id="@+id/iv_animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:contentDescription="Animation" />
//...
在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文档。希望它可以帮到某人。
答案 1 :(得分:14)
我建议不要使用Movie
或WebView
类,而应使用ImageView
而不使用source drawable设置为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切片为单独的图像。
答案 2 :(得分:2)
据我了解,您的GIF图像不会移动,因此如果您将GIF视为静态图片,那么这就是原生的Android行为。对我来说,最好的解决方案(不是重新发明轮子!)是开源库gitDrawable。检查他们的README,一切都很简单:将依赖项添加到gradle并使用(在XML或代码中)。 Java中的用法示例:
GifDrawable gifFromResource = new GifDrawable( getResources(), R.drawable.anim );
答案 3 :(得分:0)
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
在此开发人员链接中,它已明确定义。
答案 4 :(得分:0)
我能够使用这个简单的代码为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轻松实现
或者我可以为你提供straightforward to get这个东西
答案 5 :(得分:0)
使用Threads(即View.post(new Runnable))并不是一个好习惯,因为在绘制drawable时,视图可能已经改变了(一种情况是使用ListView上的动画图像,其中包含不同的项目背景图像),如果线程运行时ImageView的背景不是动画资源,则可能导致ClassCastException。
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) {
}
});
显示示例here