2012-07-23 13 views
6

Ich habe eine benutzerdefinierte Ansicht und ich verwende onDraw(), um auf meine Leinwand zu zeichnen. Ich zeichne ein Bild auf diese Leinwand.Wie man ein Bild seitwärts oder auf dem Kopf dreht?

Ich möchte das Bild auf den Kopf stellen wie ein Flip auf einer horizontalen Linie als Referenz. Dies ist nicht dasselbe wie das Drehen des Bildes um 180 Grad oder -180 Grad.

Ebenso möchte ich Sidways spiegeln oder spiegeln, d. H. Mit einer vertikalen Linie, wie es Pivot oder Referenz ist. Auch dies ist nicht das gleiche wie die canvas.rotate() bietet.

Ich frage mich, wie es geht. Sollte ich eine Matrix verwenden oder bietet Canvas eine beliebige Methode, um es wie eine "Rotation" zu machen.

Danke.

Antwort

23

Sie können es nicht direkt mit Canvas tun. Sie müssen die Bitmap (mit Matrix) ändern, bevor Sie sie zeichnen. Glücklicherweise ist es ein sehr einfacher Code, dies zu tun:

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

dank @ aleks-g –

+0

Danke für den Code-Schnipsel. Wo ich ein umgedrehtes Bild haben wollte und setImageResource benutzte, ersetzte ich einfach mit diesem: imageView.setImageBitmap (flip (BitmapFactory.decodeResource (getResources(), R.id.someimage), Direction.HORIZONTAL)); –

+1

Ich weiß, das ist sehr alt, aber das hat nur meinen Speck gerettet. Vielen Dank! – LokiSinclair

Verwandte Themen