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);
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
@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 ... –
Nun hast du gefragt: "Warum muss ich jedes Mal eine neue Matrix erstellen, wenn ich rotieren möchte?" – Blackbelt