Sprite Sheet — новый спрайт рисуется поверх старых спрайтов

В основном я пытался использовать лист спрайтов для анимации. Цель состоит в том, чтобы сосчитать от 1 до 8 с интервалом в 1 секунду. Числа представляют собой изображение на листе спрайтов. Проблема в том, что когда число рисуется на холсте, оно просто не исчезнет. Новое изображение просто нарисовано поверх ненужного старого изображения. Вот так: введите здесь описание изображения

Есть ли способ очистить то, что было нарисовано, чтобы новое изображение можно было нарисовать на чистом холсте?

Класс DrawStripFrame:

public class DrawStripFrame extends SurfaceView implements Runnable{

/**variables declared here*/

public DrawStripFrame (Context context){
    super (context);
    this.context = context;
    holder = getHolder();
}

public void setDrawStripFrame(Bitmap bitmap, int width, int height, int columns){
    this.bitmap = bitmap;
    this.width = width;
    this.height = height;
    this.columns = columns;
}
}

@Override
public void run(){
        while(running){         
            if(!holder.getSurface().isValid())
                continue;
                Canvas canvas = holder.lockCanvas();
                draw(canvas);
                holder.unlockCanvasAndPost(canvas);
        }
}

public void draw (Canvas canvas){
    update();
            /**4 being no. of columns and 2 being no. of row*/
    int u = (frame % 4)*(width/4);
    int v = (frame / 4)*(height/2);
    Rect src = new Rect(u,v,u+(width/4),v+(height/2));
    Rect dst = new Rect (0,0, 100,100);
    Paint paint = new Paint();
    canvas.drawBitmap(bitmap, src, dst, paint);
}

public void resume() {
    running = true;
    gameloop = new Thread(this);
    gameloop.start();
}


public void update (){
    frame++;
    if (frame>10)
        frame = 0;
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

person Wallyfull    schedule 30.01.2014    source источник


Ответы (1)


В вашем случае вы можете просто перерисовать холст таким цветом:

public void draw (Canvas canvas){
    update();

    // clearing canvas
    canvas.drawColor(Color.BLUE); // whatever color you need it to be        

        /**4 being no. of columns and 2 being no. of row*/
    int u = (frame % 4)*(width/4);
    int v = (frame / 4)*(height/2);
    Rect src = new Rect(u,v,u+(width/4),v+(height/2));
    Rect dst = new Rect (0,0, 100,100);
    Paint paint = new Paint();
    canvas.drawBitmap(bitmap, src, dst, paint);

}

person stackdaddy    schedule 30.01.2014