Wiem, że SO jest pełne pytań Matrix, ale nie mogę znaleźć pytania, w którym jest ono w pełni wyjaśnione. Domyślam się, że każdy ImageView ma Matrix, który jest odpowiedzialny za skalowanie, obracanie i pozycję. Ale dlaczego nie mogę obrócić obraz przy użyciu macierzy tak:zrozumienie użycia 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);
kilka odpowiedzi sugerować, aby zrobić to w ten sposób:
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);
dlatego muszę stworzyć nową matryca za każdym razem kiedy chcesz się obracać? Co więcej, jeśli ustawię macierz z drugiego przykładu, dlaczego ponownie się nie obróci (do pierwotnego poziomu), jeśli ustawię ponownie rotationMatrix
? Jeśli chcę uzyskać oryginalny stopień, mogę ustawić gładką Matrix. ale Ponownie, NIE rozumiem, dlaczego nie będzie działać.
Uwaga: Próbowałem również metodę setRotate
bez zachowania żadnej różnicy
EDIT: ze względu na komentarz
Poprosiłem Dlaczego muszę utworzyć nowe spędzaj Matrix, co implikuje pytanie, dlaczego Nie mogę używać Matrix w miejscu. Co Podejrzewam do pracy też był to (które faktycznie nie będzie, zbyt):
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);
Dokumentacja mówi, że nie powinieneś używać matrycy zwróconej przez getImageMatrix. Spójrz [tutaj] (http://developer.android.com/reference/android/widget/ImageView.html#getImageMatrix()) – Blackbelt
@blackbelt Prosiłem o wyjaśnienie DLACZEGO nie powinienem używać tej matrycy w miejscu, przynajmniej jeśli nie jest zerowy ..., zwłaszcza jeśli ustawiłem go wcześniej ... –
Właściwie zapytałeś: "DLACZEGO za każdym razem, gdy chcę obrócić, muszę utworzyć nową Matrix?" – Blackbelt