实现内容是:在android实现Gif播放,原理是自定义View,然后在自定view用Movie类实现Gif画在canvas中来播放Movie中的图片。
内容:提供播放和暂停功能
注意事项:在注册表对应的Activity中要android:hardwareAccelerated="false",就是说不要利用硬件加速,原理参考:http://blog.csdn.net/yarkey09/article/details/13022387
package com.example.myViews;
import java.io.InputStream;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;
/**
*
* @author lxq
* @version 1.0
* @category 实现自定义播放Gif
*
*/
public class GifImageView extends ImageView {
private Movie movie;
private boolean isPlaying=false; //表示正在播放
private int with=0;
private int height=0;
private long currentTime=0;
private long preTime=0;
private boolean haveGif=false;
private long pausePage=0;
private long currentPage=0;
private boolean is_init=false;
public GifImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public GifImageView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public GifImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
protected void onDraw(Canvas canvas) {
if(!haveGif) super.onDraw(canvas);
else if(movie!=null){
if(is_init){
movie.setTime(0);
movie.draw(canvas, 0, 0);
is_init=false;
}
else{
if(isPlaying){
if(!playMovie(canvas)){
pausePage=0;
currentPage=0;
isPlaying=false;
is_init=true;
}
invalidate();
}
else{
playMovie(ca