帧动画 FrameMovie

来源:互联网 发布:指画用什么软件 编辑:程序博客网 时间:2024/04/28 00:26
public class FrameMovie extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(new FrameMovieView(this));}}class FrameMovieView extends SurfaceView implements Callback,Runnable{private SurfaceHolder mSurfaceHolder;private Thread mThread;private Canvas mCanvas;private boolean mFlag;private Bitmap[] mFishBitmaps=new Bitmap[10];private int mCurrentFrame;private Paint mPaint;public FrameMovieView(Context context) {super(context);mSurfaceHolder=this.getHolder();mSurfaceHolder.addCallback(this);mPaint=new Paint();mPaint.setColor(Color.WHITE);mPaint.setAntiAlias(true);setFocusable(true);for (int i = 0; i < mFishBitmaps.length; i++) {mFishBitmaps[i]=BitmapFactory.decodeResource(getResources(), R.drawable.fish0+i);}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {mFlag=true;mThread=new Thread(this,"My Thread");mThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {mFlag=false;}@Overridepublic void run() {while (mFlag) {long start=System.currentTimeMillis();myDraw();logic();long end=System.currentTimeMillis();if((end-start)<50){try {Thread.sleep(50-(end-start));} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}private void logic() {mCurrentFrame++;if(mCurrentFrame>=mFishBitmaps.length){mCurrentFrame=0;}}private void myDraw() {mCanvas=mSurfaceHolder.lockCanvas();if (mCanvas != null) {mCanvas.drawColor(Color.WHITE);mCanvas.drawBitmap(mFishBitmaps[mCurrentFrame], 0,0,mPaint);}mSurfaceHolder.unlockCanvasAndPost(mCanvas);}}

问题一:

private void logic() {mCurrentFrame++;if(mCurrentFrame>=mFishBitmaps.length){mCurrentFrame=0;}}
在刚开始写这个函数的时候将if(mCurrentFrame>=mFishBitmaps.length)写成if(mCurrentFrame>mFishBitmaps.length)导致画面播放一会之后出现 java.lang.ArrayIndexOutOfBoundsException