Używam następującego kodu, aby obrócić obraz w ImageView o kąt. Czy jest dostępna prostsza i mniej złożona metoda.
ImageView iv = (ImageView)findViewById(imageviewid);
TextView tv = (TextView)findViewById(txtViewsid);
Matrix mat = new Matrix();
Bitmap bMap = BitmapFactory.decodeResource(getResources(),imageid);
mat.postRotate(Integer.parseInt(degree));===>angle to be rotated
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,bMap.getWidth(),bMap.getHeight(), mat, true);
iv.setImageBitmap(bMapRotate);
Odpowiedzi:
Kolejny prosty sposób na obrócenie
ImageView
:AKTUALIZACJA:
wymagany import:
Kod: (Zakładając
imageView
,angle
,pivotX
ipivotY
są już zdefiniowane)Ta metoda nie wymaga każdorazowego tworzenia nowej mapy bitowej.
źródło
ImageView
wartościach:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
ImageView
„ssrc
atrybut.getDrawable()
zwracał dla mnie wartość null, dopóki nie zdałem sobie sprawy, że ustawiłem atrybutImageView
'sbackground
zamiastsrc
. facepalmmImageView.setRotation(angle)
z API> = 11źródło
ViewPropertyAnimator
, który jest używany w następujący sposóbaView.animate().rotation(20).start()
rotationBy()
. Na przykładview.animate().rotationBy(180f).start()
. Ale staje się problematyczne, jeśli widok jest klikany sukcesywnie.Jeśli obsługujesz API 11 lub nowszy, możesz po prostu użyć następującego atrybutu XML:
Może nie wyświetlać się poprawnie w podglądzie XML Android Studio, ale działa zgodnie z oczekiwaniami.
źródło
background
aby zobaczyć efekt.Można to zrobić na dwa sposoby:
1 Używanie
Matrix
do tworzenia nowej bitmapy:2 Zastosowanie
RotateAnimation
naView
który chcesz obrócić, i upewnij się, że zestaw animacjifillAfter=true
,duration=0
orazfromDegrees=toDgrees
i nadmuchaj animację w kodzie:
źródło
Wiem, że to szalenie późno, ale było to dla mnie pomocne, więc może pomóc innym.
Od interfejsu API 11 można programowo ustawić bezwzględną rotację ImageView przy użyciu
imageView.setRotation(angleInDegrees);
metody.Absolutnie mam na myśli, że możesz wielokrotnie wywoływać tę funkcję bez konieczności śledzenia bieżącego obrotu. To znaczy, jeśli obrócę przechodząc
15F
dosetRotation()
metody, a następnie wywołamsetRotation()
ponownie z30F
, obrót obrazu o 30 stopni, a nie 45 stopni.Uwaga: to faktycznie działa dla dowolnej podklasy obiektu View , nie tylko dla ImageView.
źródło
To jest moja implementacja RotatableImageView . Użycie jest bardzo proste: wystarczy skopiować attrs.xml i RotatableImageView.java do projektu i dodać RotatableImageView do układu. Ustaw żądany kąt obrotu na przykładzie: parametr kąta .
Jeśli masz problemy z wyświetlaniem obrazu, spróbuj zmienić kod w metodzie RotatableImageView.onDraw () lub użyj metody draw ().
źródło
Można to również zrobić w ten sposób: -
dostałem się stąd.
źródło
Ponadto, jeśli chcesz obrócić ImageView o 180 stopni w pionie lub w poziomie, możesz użyć
scaleY
lubscaleX
właściwości i ustawić je na-1f
. Oto przykład Kotlina:1f
value służy do powrotu ImageView do normalnego stanu:źródło
Mam na to rozwiązanie . Właściwie jest to rozwiązanie problemu, który pojawia się po obróceniu (prostokątny obraz nie pasuje do ImagView), ale obejmuje również twój problem. Chociaż to rozwiązanie ma animację na lepsze lub na gorsze
Pobranie parametrów imageView nie jest możliwe przy inicjalizacji działania Aby to zrobić skorzystaj z tego rozwiązania LUB ustaw wymiary po kliknięciu przycisku Jak ten
I kod do uruchomienia, gdy chcemy obrócić ImageView
To rozwiązanie jest wystarczające do rozwiązania powyższego problemu, chociaż zmniejszy to imageView nawet jeśli nie jest to konieczne (gdy wysokość jest mniejsza niż szerokość) .Jeśli ci to przeszkadza, możesz dodać kolejny operator trójskładnikowy wewnątrz scaleX / scaleY.
źródło
Myślę, że najlepsza metoda :)
źródło
Obróć obraz w systemie Android z opóźnieniem:
źródło
spróbuj tego na niestandardowym widoku
źródło
oto dobre rozwiązanie do umieszczania obróconego elementu rysunkowego dla imageView:
stosowanie:
inna alternatywa:
również, jeśli chcesz obrócić bitmapę, ale boisz się OOM, możesz użyć rozwiązania NDK, które tutaj stworzyłem
źródło
Jeśli chcesz tylko wizualnie obrócić widok, możesz użyć:
źródło
Dla Kotlina,
Spowoduje to obrócenie imageView zamiast obracania obrazu
Ponadto, chociaż jest to metoda w
View
klasie. Możesz więc prawie obrócić dowolny widok, używając go.źródło
Niestety, nie sądzę.
Matrix
Klasa jest odpowiedzialna za wszystkich manipulacji obrazu, czy to obracanie, kurczy / rośnie, wypaczenia, itphttp://developer.android.com/reference/android/graphics/Matrix.html
Przepraszam, ale nie mogę wymyślić alternatywy. Może ktoś inny mógłby to zrobić, ale kiedy musiałem manipulować obrazem, korzystałem z Matrixa.
Powodzenia!
źródło
Innym możliwym rozwiązaniem jest utworzenie własnego niestandardowego widoku obrazu (powiedzmy
RotateableImageView extends ImageView
) ... i zastąpienie onDraw (), aby obrócić płótno / mapy bitowe przed ponownym przeniesieniem na płótno. Nie zapomnij przywrócić płótna.Ale jeśli zamierzasz obrócić tylko jedno wystąpienie widoku obrazu, Twoje rozwiązanie powinno być wystarczająco dobre.
źródło
bez matrycy i animowane:
źródło
po prostu napisz to w swoim onactivityResult
źródło
Wypróbuj ten kod w 100% działający;
Kliknij przycisk obracania i napisz ten kod:
źródło
Zamiast konwertować obraz do mapy bitowej, a następnie obracać go, spróbuj obrócić bezpośredni widok obrazu, jak w poniższym kodzie.
źródło
Postępuj zgodnie z poniższą odpowiedzią, aby uzyskać ciągłą rotację widoku obrazu
Jeśli kliknięto przycisk obracania
źródło
jeśli chcesz obrócić obraz o 180 stopni, umieść te dwie wartości w tagu imageview: -
Wyjaśnienie: - scaleX = 1 i scaleY = 1 reprezentują stan normalny, ale jeśli ustawimy -1 na właściwości scaleX / scaleY, to zostanie obrócona o 180 stopni
źródło
jak używać?
źródło
Możesz po prostu użyć atrybutu obracania ImageView
Poniżej znajduje się atrybut z ImageView ze szczegółami ze źródła Androida
źródło