surfaceView  轮流绘制图片,在一个SurfaceView 中连续播放三张图片,后台修改数据线程有问题,大家帮帮我吧。
public class AnimationView extends SurfaceView  implements SurfaceHolder.Callback{
    
   AnimationDrawThread   adt;     //后台重绘线程
   AnimationThread   at;          //后台修改数据线程
   Bitmap []      bitmaps;        //轮流播放的三张图片数组
   int   index= 0;   //3个动画图片的索引
   int   status=-1;    // 0 代表3个动画图片进来,1代表旋转背景图片进来,2代表全部渐显,3代表待命
public AnimationView(AnimationMainActivity father) {
super(father);
// TODO Auto-generated constructor stub
getHolder().addCallback(this);
initBitmap(getResources());
at = new AnimationThread(this);
adt = new AnimationDrawThread(this,getHolder());
status = 0;
} public   void  initBitmap(Resources  r){
bitmaps = new Bitmap[3];
bitmaps[0] = BitmapFactory.decodeResource(r, R.drawable.p1);
bitmaps[1] = BitmapFactory.decodeResource(r, R.drawable.p2);
bitmaps[2] = BitmapFactory.decodeResource(r, R.drawable.p3);

}

public  void doDraw(Canvas  canvas){
Paint   paint = new Paint();
switch (status) {
case 0:
canvas.drawBitmap(bitmaps[index], 0,0,paint);
break;
case 1:   //全场透明
default:
break;
}

}

public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

} public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(!at.isAlive()){      //这里的at 是修改数据线程对象,可是如果没有修改数据线程,这里就是重绘线程对象,搞不清楚啊
adt.start();
}
} public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(at.isAlive()){
at.flag = false;
}
}}//后台重绘线程就不贴上来了,因为是正确的,
// 下面的修改数据线程
AnimationView     father;
boolean    flag;
float    rotateAngle = 60;
int    rotateCounter = 0;  //旋转计数器
int     animationCounter = 0;  //换帧计数器
int     sleepSpan=1000;      //休眠时间
public   AnimationThread(AnimationView   father){

this.father = father;
flag = true;
}

public   void   run(){
while(flag){
switch (father.status) {
case 0:
animationCounter++;
if(animationCounter==4){
father.index++;       //好像就是没有执行这里的方法,不知道是什么原因
if(father.index==3){
father.status=1;
}
animationCounter=0;
}
break;
case 1:
this.flag = false;
break;
default:
break;
}
try {
Thread.sleep(sleepSpan);

catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
}