Borrar lienzo con Canvas.drawColor ()

Estoy intentando cambiar la imagen de fondo de una Vista personalizada con cierto éxito. la imagen cambiará pero el problema es que todavía veo rastros de la imagen anterior. Cuando intento borrar el lienzo antes de dibujar la nueva imagen, parece que no funciona. creo un mapa de bits para almacenar la imagen. al cambiar la imagen, llamo a Canvas.drawColor () antes de dibujar la nueva imagen pero la imagen anterior persiste. He intentado drawColor (0), drawColor (Color.BLACK), c.drawColor (0, PorterDuff.Mode.CLEAR), y ninguno de los anteriores funciona. como tal, tuve que publicar esto para su revisión por parte de mentes más experimentadas que la mía.

El código real es el siguiente:

private int bgnd;
private boolean switching;

public void setBgnd(int incoming){
    switching = true;
    switch (incoming){

    case R.drawable.image1:
        bgnd = incoming;
        this.invalidate();
        break;

    case R.drawable.image2:
        bgnd = incoming;
        this.invalidate();
        break;

    }
}



protected void onDraw(Canvas c){
    if(switching == true){
        Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd);
        c.drawColor(0, PorterDuff.Mode.CLEAR);
        c.drawBitmap(b, 0, 0, null);
        switching = false;

    }else{
        Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd);
        c.drawBitmap(b, 0, 0, null);
    }
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta