Android加载Gif图片的一般方法:Movie实现
2015-12-31 15:31
441 查看
Android加载Gif图片的一般方法:Movie实现
Android的ImageView无法直接加载Gif图片,如果需要在自己的代码中加载一个gif图片(这很常见,比如下载过程中的loading以示正在下载的转动的圆球),则无法直接用ImageView。鉴于此,Android社区开发者为解决此问题贡献了很多解决方案,其中一种比较简易且比较流行的做法是通过Android Movie的方式把一个gif图片当作一个原始的资源加载到Movie,然后Movie将其解析为Movie帧进行加载。具体代码如下:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;
public class ZhangPhilGifView extends View {
private Movie mMovie;
private long mMovieStart = 0;
public ZhangPhilGifView(Context context, AttributeSet attrs) {
super(context, attrs);
mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation));
}
@Override
public void onDraw(Canvas canvas) {
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) {
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();
}
}
}
使用时候,直接将其作为一个Android普通的view使用即可,但需要在构造函数时候写进一个拟打算加载的gif资源文件id。比如drawable目录下面的animation.gif文件,其id为:R.drawable.animation
附录文章:
《基于开源框架Glide加载Gif资源图到Android ImageView中》链接地址:http://blog.csdn.net/zhangphil/article/details/45561983
Android加载Gif图片的一般方法:Movie实现
Android的ImageView无法直接加载Gif图片,如果需要在自己的代码中加载一个gif图片(这很常见,比如下载过程中的loading以示正在下载的转动的圆球),则无法直接用ImageView。鉴于此,Android社区开发者为解决此问题贡献了很多解决方案,其中一种比较简易且比较流行的做法是通过Android Movie的方式把一个gif图片当作一个原始的资源加载到Movie,然后Movie将其解析为Movie帧进行加载。具体代码如下:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;
public class ZhangPhilGifView extends View {
private Movie mMovie;
private long mMovieStart = 0;
public ZhangPhilGifView(Context context, AttributeSet attrs) {
super(context, attrs);
mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation));
}
@Override
public void onDraw(Canvas canvas) {
long now = android.os.SystemClock.uptimeMillis();
if (mMovieStart == 0) {
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();
}
}
}
使用时候,直接将其作为一个Android普通的view使用即可,但需要在构造函数时候写进一个拟打算加载的gif资源文件id。比如drawable目录下面的animation.gif文件,其id为:R.drawable.animation
附录文章:
《基于开源框架Glide加载Gif资源图到Android ImageView中》链接地址:http://blog.csdn.net/zhangphil/article/details/45561983
相关文章推荐
- android基础:android页面添加滚动条
- 【Android】 加解密算法 HMAC 的使用
- Android编程动态修改RelativeLayout宽高的方法
- Android开发总结笔记 View的绘制机制 3-7
- 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!
- [Android]日期转换参考
- Android JNI 错误解决方案(1)
- Android Studio NDK配置
- android apktool 基本的安装与使用
- Android自定义View的实现方法,带你一步步深入了解View(四)
- Android 自定义圆形进度条(圆环刻度)View
- android使用小结(下)----2015
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android---Paint
- Android应用课程
- Android自定义View的实现方法,带你一步步深入了解View
- Android 系统名字、版本、API level的对应关系
- android 数据持久化
- android使用AudioTrack播放多个音频文件