2013-07-12 11 views
7

Ich weiß, dass SO voll von Matrix-Fragen ist, aber ich kann keine Frage finden, wo es vollständig erklärt wird. Ich nehme an, dass jedes ImageView eine Matrix hat, die für Skalierung, Rotation und die Position verantwortlich ist. Aber warum kann ich nicht ein Bild mit einer Matrix wie folgt drehen:Verständnis der Verwendung von ImageView Matrix

ImageView img = (ImageView)findViewById(R.id.some_imageview); 
img.setScaleType(ScaleType.Matrix); 
Rect bounds = img.getDrawable.getBounds(); 
img.getImageMatrix().postRotate(180f, bounds.width()/2, bounds.height()/2); 

mehrere Antworten deuten darauf hin, es so zu tun:

ImageView img = (ImageView)findViewById(R.id.some_imageview); 
img.setScaleType(ScaleType.Matrix); 
Rect bounds = img.getDrawable.getBounds(); 
Matrix rotationMatrix = new Matrix(); 
rotationMatrix.postRotate(180f, bounds.width()/2, bounds.height()/2); 
img.setImageMatrix(rotationMatrix); 

WARUM ich eine neue Matrix jedes Mal, wenn ich erstellen haben willst du drehen? Außerdem, wenn ich die Matrix aus dem zweiten Beispiel setze, Warum dreht sie sich nicht wieder (auf ihren ursprünglichen Grad), wenn ich die rotationMatrix wieder einstelle? Wenn ich den ursprünglichen Grad erreichen möchte, kann ich eine einfach aufgebaute Matrix setzen. aber wieder verstehe ich nicht warum

wird nicht funktionieren.

Anmerkung: Ich habe auch versucht, die setRotate Methode ohne einen Unterschied zu beobachten

EDIT: aufgrund eines Kommentars

ich gefragt, warum ich eine neue Matrix jedes Mal zu schaffen haben, was die Frage impliziert, warum Ich kann die Matrix nicht verwenden. Auch Was ich an die Arbeit vermuten war (was eigentlich will nicht, auch):

ImageView img = (ImageView)findViewById(R.id.some_imageview); 
img.setScaleType(ScaleType.Matrix); 
Rect bounds = img.getDrawable.getBounds(); 
Matrix rotationMatrix = new Matrix(); 
rotationMatrix.postRotate(180f, bounds.width()/2, bounds.height()/2); 
img.setImageMatrix(rotationMatrix); 
//works until here. 

//Then after that successful call 

//assumed to get my Matrix back, which is rotated by 180 degrees 

Matrix matrix = img.getImageMatrix(); 
Rext bounds = img.getDrawable().getBounds() 
//rotate again at 90 degree. It should be now rotated 270 degrees (180 from before, plus 90 now) 
matrix.postRotate(90f, bounds.width()/2, bounds.height()/2); 
//unfortunately NO effect! 
img.setImageMatrix(matrix); 
+0

Die Dokumentation besagt, dass Sie die von getImageMatrix zurückgegebene Matrix nicht verwenden sollten. Schauen Sie [hier] (http://developer.android.com/reference/android/widget/ImageView.html#getImageMatrix()) – Blackbelt

+0

@blackbelt Ich fragte nach einer Erklärung WARUM ich diese Matrix nicht verwenden sollte, zumindest, wenn es nicht null ist ..., besonders wenn ich es selbst vorher gesetzt habe ... –

+1

Nun hast du gefragt: "Warum muss ich jedes Mal eine neue Matrix erstellen, wenn ich rotieren möchte?" – Blackbelt

Antwort

1

am source Blick wie es in der setImageMatrix() Methode sieht die Matrixberechnung angewendet wird. Die Verwendung dieser Matrix danach (d. H. Nach dem Erhalten durch den Getter) hat keine Wirkung, wenn die Berechnung in der Setzer-Methode durchgeführt wird.

Verwandte Themen