Android: Pivoter l'image dans imageview par un angle
J'utilise le code suivant pour faire pivoter une image dans ImageView par un angle. Est-il plus simple et moins complexe que la méthode disponible.
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);
- PS pour 2014, il semble que vous pouvez tout simplement mis de "rotation" dans le XML dans Android Studio. (Vous pouvez même il suffit de cliquer sur "expert" propriétés du bouton sur la droite, si vous ne pouvez pas être dérangé en utilisant le "Texte" mise en page!)
- trouver droit de réponse ici. stackoverflow.com/a/52983423/5872337
Vous devez vous connecter pour publier un commentaire.
Un autre moyen simple pour faire pivoter une
ImageView
:Mise à JOUR:
Requis importations:
Code: (en Supposant que
imageView
,angle
,pivotX
&pivotY
sont déjà définis)Cette méthode ne nécessite pas la création d'une nouvelle image à chaque fois.
ImageView
's valeurs:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
ImageView
'ssrc
attribut.getDrawable()
était de retourner la valeur null pour moi jusqu'à ce que j'ai réalisé que j'avais mis de laImageView
'sbackground
attribut au lieu desrc
. facepalmimageView.getWidth() / 2
?onConfigurationChanged
mais il ne fonctionne pas, une idée? Je suis en train de faire pivoter l'image lors de l'orientation de l'écran changemImageView.setRotation(angle)
avec l'API>=11ViewPropertyAnimator
, qui est utilisé commeaView.animate().rotation(20).start()
rotationBy()
. Par exemple,view.animate().rotationBy(180f).start()
. Mais il devient problématique si la vue est cliqué successivement.Si vous êtes à l'appui de l'API de 11 ou plus, vous pouvez simplement utiliser le code XML suivant attribut:
Il peut ne pas s'afficher correctement dans Android Studio xml aperçu, mais il fonctionne comme prévu.
background
pour voir l'effet.Il y a deux façons de le faire:
1 à l'Aide de
Matrix
pour créer une nouvelle image:2 utilisez
RotateAnimation
sur leView
vous souhaitez faire Pivoter, et assurez-vous que l'Animation de l'ensemble defillAfter=true
,duration=0
, etfromDegrees=toDgrees
et de Gonfler l'Animation dans le code:
Je sais que c'est incroyablement en retard, mais il a été utile pour moi de sorte qu'il peut aider les autres.
Comme de l'API 11, vous pouvez définir l'absolu rotation d'un ImageView par programmation à l'aide de la
imageView.setRotation(angleInDegrees);
méthode.Par l'absolu, je veux dire que vous pouvez appeler à plusieurs reprises cette fonction sans avoir à garder une trace de la rotation actuelle. Ce qui signifie, si je tourne en passant
15F
à lasetRotation()
méthode, et ensuite appelersetRotation()
à nouveau avec30F
, l'image de la rotation de la avec 30 degrés, pas 45 degrés.Remarque: Cela fonctionne pour n'importe quelle sous-classe de la Vue objet, pas seulement ImageView.
C'est mon la mise en œuvre de RotatableImageView. Son utilisation est très facile: il suffit de copier attrs.xml et RotatableImageView.java dans votre projet et ajoutez RotatableImageView à votre disposition. Jeu souhaité de l'angle de rotation à l'aide de exemple:angle paramètre.
Si vous avez quelques problèmes avec l'affichage de l'image, essayez de modifier le code dans RotatableImageView.onDraw() méthode ou utiliser la méthode draw() à la place.
Aussi, si vous voulez faire pivoter une ImageView par 180 degrés à la verticale ou à l'horizontale, vous pouvez utiliser
scaleY
ouscaleX
propriétés et les mettre à la-1f
. Voici une Kotlin exemple:1f
valeur est utilisée pour retourner une ImageView à son état normal:J'ai un solution à cela.
Effectivement c'est une solution à un problème qui se pose après la rotation(Rectangulaire de l'image ne rentre pas ImagView)
mais il couvre votre problème..
Bien que cette Solution a de l'Animation pour le meilleur ou pour le pire
Obtenir les paramètres de imageView n'est pas possible lors de l'initialisation de l'activité
Pour ce faire, veuillez vous référer à cette solution
OU définir les dimensions à l'onClick d'un Bouton de cette
Et le code à exécuter lorsque l'on veut tourner ImageView
Cette solution est suffisante pour le Problème ci-dessus.Bien qu'il diminuera l'imageView même si il n'est pas nécessaire(lorsque la taille est plus petite que la Largeur).Si cela vous dérange,vous pouvez ajouter un autre opérateur ternaire à l'intérieur de scaleX/scaleY.
Je pense que la meilleure méthode 🙂
Peut également être fait de cette façon:-
obtenu à partir d'ici.
essayer cela sur une vue personnalisée
voici une belle solution pour mettre une rotation drawable pour une imageView:
utilisation:
une autre alternative:
aussi, si vous souhaitez faire pivoter l'image, mais peur de OOM, vous pouvez utiliser le NDK solution que j'ai faite ici
Si vous voulez seulement faire pivoter la vue visuellement, vous pouvez utiliser:
Malheureusement, je ne pense pas qu'il y est. Le
Matrix
de classe est responsable de toutes les manipulations d'image, si elle est en rotation, réduction/la culture, de l'inclinaison, etc.http://developer.android.com/reference/android/graphics/Matrix.html
Mes excuses, mais je ne peux pas penser à une alternative. Peut-être quelqu'un d'autre pourrait être en mesure de le faire, mais la fois où j'ai eu à manipuler une image, j'ai utilisé une Matrice.
Bonne chance!
Une autre solution possible est de créer votre propre affichage de l'Image(dis
RotateableImageView extends ImageView
)...et remplacer le onDraw() pour faire pivoter le canevas/bitmaps avant redering sur la toile.N'oubliez pas de restaurer le dos toile.Mais si vous allez faire tourner qu'une seule instance de l'affichage de l'image,votre solution doit être assez bon.
sans matrice et d'animation:
il suffit d'écrire ceci dans votre onactivityResult
Essayer ce code 100% de travail;
Sur le bouton de rotation de cliquer sur écrire ce code:
Plutôt que de convertir une image bitmap et de la faire pivoter essayer de tourner directe d'affichage de l'image comme ci-dessous de code.
Suivre au-dessous de la réponse pour la rotation continue d'un imageview
Si tournez le bouton cliqué
Faire pivoter une image dans android avec retard: