Glide太大了,用movie的时候发现了这个问题,因为对gif的格式不了解,不知道是不是因为格式原因还是大小原因导致的。
3条回答 默认 最新
- qq_41968175 2018-05-28 13:37关注
Android支持GIF动画,但是如果利用ImageView标签直接写在布局文件中:
Xml代码 收藏代码
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/animation" />程序只能加载GIF动画的第一帧。效果如下:
如果想要正常播放GIF动画,需要借助Movie实现。写了一个简单示例,程序目录结构如下:
animation.gif是需要播放的GIF动画。
MainActivity实现了加载GIF动画的功能。
Java代码 收藏代码
public class MainActivity extends Activity {private Movie mMovie; private long mMovieStart; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new CustomGifView(this)); } class CustomGifView extends View { public CustomGifView(Context context) { super(context); mMovie = Movie.decodeStream(getResources().openRawResource( R.drawable.animation)); } public void onDraw(Canvas canvas) { long now = android.os.SystemClock.uptimeMillis(); if (mMovieStart == 0) { // first time mMovieStart = now; } if (mMovie != null) { int dur = mMovie.duration(); if (dur == 0) { dur = 1000; } int relTime = (int) ((now – mMovieStart) % dur); mMovie.setTime(relTime); mMovie.draw(canvas, 0, 0); invalidate(); } } }
}
内部类CustomGifView 利用Movie播放GIF动画。解释一下:
Java代码 收藏代码
mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation));将GIF动画以文件流的形式转换成Movie。
Java代码 收藏代码
public void onDraw(Canvas canvas) {
long now = android.os.SystemClock.uptimeMillis();if (mMovieStart == 0) { // first time mMovieStart = now; } if (mMovie != null) { int dur = mMovie.duration(); if (dur == 0) { dur = 1000; } int relTime = (int) ((now – mMovieStart) % dur); mMovie.setTime(relTime); mMovie.draw(canvas, 0, 0); invalidate(); } }
invalidate();作用是刷新当前View,这样onDraw方法重复执行,Movie就能画出GIF动画的每一帧。到此,GIF动画就能正常播放了。
附上一条资源:http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/
解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?
- ¥15 c++头文件不能识别CDialog