使用SurfaceView + LruCache的方式来进行对帧动画的处理,避免由于图片过多过大导致的OOM问题。
代码:
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.io.IOException;
public class BoSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private Context mContext;
/**
* 画布
*/
private Canvas canvas;
/**
* 绘制区域的矩形
*/
private Rect rect;
/**
* 存放图片集合的文件夹路径 (我的在assets下 ,这个可以看着来)
*/
private String parentFileName = "recordimg";
/**
* 图片缓存
*/
private BoBitmapLruCache lruCache;
private AssetManager assets;
/**
* 图片路径的数组
*/
private String[] recordimgs;
/**
* 是否继续播放的开关
*/
private boolean isStop = true;
/**
* 每秒播放的帧数
*/
private int frameCount = 30;
private SurfaceHolder holder;
public BoSurfaceView(Context context) {
this( context, null );
}
public BoSurfaceView(Context context, AttributeSet attrs) {
this( context, attrs, 0 );
}