2010-12-29 9 views
4

Diese scheint wie eine dumme Frage, aber ich konnte keine Möglichkeit sehen, dies mit Methoden in der Drawable Klasse zu tun. Dann dachte ich, ich müsste vielleicht den Canvas irgendwie umdrehen ... konnte trotzdem keine passende Methode finden.Umdrehen Drawable auf einer X- oder Y-Achse

Ich muss nur ein Drawable auf seiner y-Achse "umdrehen" .. die Mitte y vorzugsweise. Wie kann ich das machen?

Antwort

8

Von einer 10 k ft-Ebene möchten Sie eine neue Bitmap erstellen und eine Transformationsmatrix angeben, um die Bitmap umzukehren.

Dies ist vielleicht etwas übertrieben, aber hier ist eine kleine Beispielanwendung, die veranschaulicht, wie dies zu tun ist. Wie geschrieben, dreht die Transformationsmatrix-Vorskalierung von (-1,0f, 1,0f) das Bild in der x-Richtung, eine Vorskalierung von (1,0f, -1,0f) würde es in der y-Richtung spiegeln.

public class flip extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Set view to our created view 
     setContentView(new drawView(this)); 
    } 

    private class drawView extends View{ 
     public drawView(Context context){ 
      super(context); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 

      //Load the jellyfish drawable 
      Bitmap sprite = BitmapFactory.decodeResource(this.getResources(), R.drawable.jellyfish); 

      //Create a matrix to be used to transform the bitmap 
      Matrix mirrorMatrix = new Matrix(); 

      //Set the matrix to mirror the image in the x direction 
      mirrorMatrix.preScale(-1.0f, 1.0f); 

      //Create a flipped sprite using the transform matrix and the original sprite 
      Bitmap fSprite = Bitmap.createBitmap(sprite, 0, 0, sprite.getWidth(), sprite.getHeight(), mirrorMatrix, false); 

      //Draw the first sprite 
      canvas.drawBitmap(sprite, 0, 0, null); 

      //Draw the second sprite 5 pixels to the right of the 1st sprite 
      canvas.drawBitmap(fSprite, sprite.getWidth() + 5, 0, null); 
     } 
    } 
} 
+0

Danke! Ich weiß noch nicht viel über Matrices. Vielleicht hilft mir das, zu verstehen: p – Snailer

+0

Warum würden Sie "Aktivität" verlängern? Ich kann mir keinen Fall vorstellen, in dem die gesamte Inhaltsansicht die "Bitmap" wäre, die umgedreht wird. –

+0

"Das ist vielleicht etwas übertrieben, aber hier ist eine kleine Beispielanwendung". Es ist ein vollständig in sich geschlossenes Beispiel, es ist eine Übung, es so zu implementieren, dass es für Ihre Verwendung sinnvoll ist. –