嗯嗯,对不起,下面是代码
MainActivity.javapackage com.example.ae;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
MView bv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bv = new MView(this);
this.setContentView(bv);
}
}MV,java
package com.example.ae;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;public class MV {
//=(int)(Math.random()*10)
Bitmap bitmap1;
MView mview;
int x;
int y;
public MV(int x,int y, MView mview)
{
this.mview = mview;
this.x = x;
this.y = y;
initBitmap();
}

public void initBitmap()
{
bitmap1 = BitmapFactory.decodeResource(mview.getResources(), R.drawable.abcd);
}
public void Draw(Canvas canvas)
{
canvas.drawBitmap(bitmap1,x,y,new Paint());
}

}MView.javapackage com.example.ae;
import java.util.ArrayList;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;public class MView extends SurfaceView implements SurfaceHolder.Callback
{  int a=0;
Paint paint;
DrawThread dt;
ArrayList<MV> alMV=new ArrayList<MV>();
public MView(MainActivity activity)

super(activity);
getHolder().addCallback(this);
// TODO 自动生成的构造函数存根
initMovables();
dt = new DrawThread(this,getHolder());
}
public void initMovables()
{

int c=30;
int d=30;
for(int i=1;i<=8;i++)
{
c=c+10;
d=d+10;
MV feidie=new MV(c,d,this);
alMV.add(feidie);
//将新建的Movable对象添加到ArrayList列表中
}

}
public void onDraw(Canvas canvas)
{
a++;
//for(int i = 0;i<alMV.size()-1;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
 alMV.get(a).Draw(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO 自动生成的方法存根
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO 自动生成的方法存根
if(!dt.isAlive()){ //如果DrawThread没有启动,就启动这个线程
dt.start();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO 自动生成的方法存根
dt.flag = false; //停止线程的执行
dt = null;
}
}
DrawThread.javapackage com.example.ae; //声明包语句
import android.annotation.SuppressLint;
import android.graphics.Canvas; //引入相关类
import android.view.SurfaceHolder; //引入相关类
public class DrawThread extends Thread{
MView bv; //MView对象引用
SurfaceHolder surfaceHolder;//SurfaceHolder对象引用
boolean flag=false; //线程执行标志位
//构造器
public DrawThread(MView bv,SurfaceHolder surfaceHolder){
this.bv = bv; //为MView对象应用赋值
this.surfaceHolder = surfaceHolder; //为SurfaceHolder对象应用赋值
this.flag = true;
//设置标志位
}
@SuppressLint("WrongCall")
public void run(){
Canvas canvas = null;//声明一个Canvas对象
while(flag){
try{
canvas = surfaceHolder.lockCanvas(null);//获取MView的画布
synchronized(surfaceHolder)
{
bv.onDraw(canvas);//调用MView的onDraw方法进行绘制
}
}
catch(Exception e){
e.printStackTrace(); //捕获并打印异常
}
finally{
if(canvas != null){ //如果canvas不为空
surfaceHolder.unlockCanvasAndPost(canvas);//surfaceHolder解锁并将画布对象传回
}
}


}
}
}

解决方案 »

  1.   

    MV类改下,加个方法,清空画布的
    public void clear(Canvas canvas)  
    {  
        Paint paint = new Paint();  
        paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));  
        canvas.drawPaint(paint);  
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC));  
          
        mview.invalidate();  
    }  然后onDraw方法改下代码
    public void Draw(Canvas canvas)
        {
            clear(canvas);
            canvas.drawBitmap(bitmap1,x,y,new Paint());
        }这样就可以了