//在一帧绘制完后,直接回收它
recycleOneFrame();
}
//回收帧
private void recycleOneFrame() {
if (frameBitmap != null) {
frameBitmap.recycle();
frameBitmap = null;
}
}
@Override
protected void onFrameDraw(Canvas canvas) {
//绘制一帧前需要先清画布,否则所有帧都叠在一起同时显示
clearCanvas(canvas);
if (!isStart()) {
return;
}
if (!isFinish()) {
drawOneFrame(canvas);
} else {
onFrameAnimationEnd();
}
}
//绘制一帧,是张Bitmap
private void drawOneFrame(Canvas canvas) {
frameBitmap = BitmapUtil.decodeOriginBitmap(getResources(), bitmaps.get(bitmapIndex), options);
canvas.drawBitmap(frameBitmap, srcRect, dstRect, paint);
bitmapIndex++;
}
private void onFrameAnimationEnd() {
reset();
}
private void reset() {
bitmapIndex = INVALID_BITMAP_INDEX;
}
//帧动画是否结束
private boolean isFinish() {
return bitmapIndex >= bitmaps.size();
}
//帧动画是否开始
private boolean isStart() {
return bitmapIndex != INVALID_BITMAP_INDEX;
}
//开始播放帧动画
public void start() {
bitmapIndex = 0;
}
private void clearCanvas(Canvas canvas) {
paint.setXfermod