【发布时间】:2014-12-31 20:19:20
【问题描述】:
播放 gif 动画的方法和库有很多。我尝试了一些,效果很好。 问题是,最好的方法是什么?最好的意思是,一种尽可能减少内存空间的方法,不会在旧设备上成为逐帧帧。
我有一个小而短的 gif 动画,它是海浪,我想把它放在我的应用程序上。该应用程序在 android 2.2 + 上运行。
你能给我最好的方法吗?
国王的问候
【问题讨论】:
播放 gif 动画的方法和库有很多。我尝试了一些,效果很好。 问题是,最好的方法是什么?最好的意思是,一种尽可能减少内存空间的方法,不会在旧设备上成为逐帧帧。
我有一个小而短的 gif 动画,它是海浪,我想把它放在我的应用程序上。该应用程序在 android 2.2 + 上运行。
你能给我最好的方法吗?
国王的问候
【问题讨论】:
使用以下代码在您的应用程序中播放 gif:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
public class GifActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GifView(this));
}
static class GifView extends View {
Movie movie;
GifView(Context context) {
super(context);
File myFile = new File("/sdcard/test.gif");
InputStream fis = null;
try {
fis = new BufferedInputStream(new FileInputStream(myFile),
16 * 1024);
fis.mark(16 * 1024);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
movie = Movie.decodeStream(fis);
Log.e("SS", "movie.duration()" + movie.duration());
}
@Override
protected void onDraw(Canvas canvas) {
try {
if (movie != null) {
movie.setTime((int) SystemClock.uptimeMillis()
% movie.duration());
movie.draw(canvas, 0, 0);
invalidate();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}
在您的应用程序中播放 gif 不需要任何 3rd 方库。
【讨论】: