首页 > 其他 > 详细

动态图片 gif

时间:2016-08-08 22:29:20      阅读:227      评论:0      收藏:0      [点我收藏+]

简介
android不推荐使用gif图片,一般都是png的,对于gif的图片解析比较消耗资源,但是对于一些动态gif图片的播放,如果比较小的话还是可以的,要是大的话,建议还是把gif图片转换成一帧一帧的png图片,然后通过animation播放。
对于小的gif动态图片,可以通过Movie来播放。
注意,不能再布局中以自定义view的形式使用。
技术分享

Activity
public class MainActivity extends Activity {
    LinearLayout root;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        root = (LinearLayout) findViewById(R.id.root);
        root.addView(new CustomGifView(this, R.drawable.loading));
    }
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#666"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="简单的展示GIF动态图" />
</LinearLayout>

自定义View
/** 
 * 自定义View 播放Gif动画  
 */
public class CustomGifView extends View {
    private Movie mMovie;
    private long mMovieStart;
    public CustomGifView(Context context, int resId) {
        super(context);
        //读入字节流(或字节数组或文件)来解码创建Movie对象
        mMovie = Movie.decodeStream(getResources().openRawResource(resId));
    }
    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();
        }
    }
}





动态图片 gif

原文:http://www.cnblogs.com/baiqiantao/p/126b8ef4a2705039bfbae5ea2bcc26e8.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!