2012-07-23 7 views
6

Ho una vista personalizzata e sto usando onDraw() per disegnare sulla mia tela. Sto disegnando un'immagine su questa tela.come trasformare un'immagine lateralmente o capovolta?

Voglio capovolgere l'immagine come un capovolgimento su una linea orizzontale come riferimento. Non è lo stesso della rotazione dell'immagine di 180 o -180 gradi.

Allo stesso modo, voglio specchiare o capovolgere lateralmente con una linea verticale come perno o riferimento. Di nuovo questo non è lo stesso di quanto fornisce canvas.rotate().

Mi chiedo come si fa. Dovrei usare una matrice o tela fornire qualsiasi metodo per farlo come quello di una "rotazione".

Grazie.

risposta

23

Non è possibile farlo direttamente con Canvas. Dovrai effettivamente modificare la Bitmap (usando Matrix) prima di disegnarla. Per fortuna, si tratta di un codice molto semplice per farlo:

public enum Direction { VERTICAL, HORIZONTAL }; 

/** 
    Creates a new bitmap by flipping the specified bitmap 
    vertically or horizontally. 
    @param src  Bitmap to flip 
    @param type  Flip direction (horizontal or vertical) 
    @return   New bitmap created by flipping the given one 
         vertically or horizontally as specified by 
         the <code>type</code> parameter or 
         the original bitmap if an unknown type 
         is specified. 
**/ 
public static Bitmap flip(Bitmap src, Direction type) { 
    Matrix matrix = new Matrix(); 

    if(type == Direction.VERTICAL) { 
     matrix.preScale(1.0f, -1.0f); 
    } 
    else if(type == Direction.HORIZONTAL) { 
     matrix.preScale(-1.0f, 1.0f); 
    } else { 
     return src; 
    } 

    return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); 
} 
+0

grazie @ Aleks-g –

+0

Grazie per il frammento di codice. Dove volevo un'immagine capovolta e usavo setImageResource, ho semplicemente sostituito con questo: imageView.setImageBitmap (flip (BitmapFactory.decodeResource (getResources(), R.id.someimage), Direction.HORIZONTAL)); –

+1

So che è molto vecchio, ma questo mi ha appena salvato il bacon. Grazie! – LokiSinclair

Problemi correlati