J'utilise le code suivant pour faire pivoter une image dans ImageView d'un angle. Existe-t-il une méthode plus simple et moins complexe?
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);
Réponses:
Un autre moyen simple de faire pivoter un
ImageView
:MISE À JOUR:
Importations requises:
Code: ( En supposant
imageView
,angle
,pivotX
etpivotY
sont déjà définis)Cette méthode ne nécessite pas la création d'un nouveau bitmap à chaque fois.
la source
ImageView
valeurs de:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
ImageView
l'src
attribut de votre.getDrawable()
renvoyait null pour moi jusqu'à ce que je réalise que j'avais défini l' attributImageView
'sbackground
au lieu desrc
. facepalmmImageView.setRotation(angle)
avec API> = 11la source
ViewPropertyAnimator
, qui est utilisé commeaView.animate().rotation(20).start()
rotationBy()
. Par exempleview.animate().rotationBy(180f).start()
,. Mais cela devient problématique si la vue est cliquée successivement.Si vous prenez en charge l'API 11 ou une version ultérieure, vous pouvez simplement utiliser l'attribut XML suivant:
Il peut ne pas s'afficher correctement dans l'aperçu XML d'Android Studio, mais cela fonctionne comme prévu.
la source
background
pour voir l'effet.Il existe deux façons de procéder:
1 Utilisation
Matrix
pour créer un nouveau bitmap:2 utilisation
RotateAnimation
sur laView
faire pivoter, et assurez - vous que le jeu d'animation àfillAfter=true
,duration=0
etfromDegrees=toDgrees
et gonflez l'animation dans le code:
la source
Je sais que c'est incroyablement tard, mais cela m'a été utile pour que cela puisse aider les autres.
À partir de l'API 11, vous pouvez définir la rotation absolue d'un ImageView par programme à l'aide de la
imageView.setRotation(angleInDegrees);
méthode.Par absolu, je veux dire que vous pouvez appeler cette fonction à plusieurs reprises sans avoir à suivre la rotation actuelle. Cela signifie que si je fais pivoter en passant
15F
à lasetRotation()
méthode, puis que j'appelle àsetRotation()
nouveau avec30F
, la rotation de l'image doit être de 30 degrés et non de 45 degrés.Remarque: cela fonctionne pour n'importe quelle sous-classe de l' objet View , pas seulement ImageView.
la source
C'est mon implémentation de RotatableImageView . L' utilisation est très simple: il suffit de copier attrs.xml et RotatableImageView.java dans votre projet et ajouter RotatableImageView à votre disposition. Définissez l'angle de rotation souhaité à l'aide de l' exemple: paramètre d' angle .
Si vous rencontrez des problèmes d'affichage de l'image, essayez de modifier le code dans la méthode RotatableImageView.onDraw () ou utilisez la méthode draw () à la place.
la source
Peut également être fait de cette façon: -
obtenu d'ici.
la source
De plus, si vous souhaitez faire pivoter un ImageView de 180 degrés verticalement ou horizontalement, vous pouvez utiliser les propriétés
scaleY
ouscaleX
et les définir sur-1f
. Voici un exemple Kotlin:1f
value est utilisée pour ramener une ImageView à son état normal:la source
J'ai une solution à cela. En fait, c'est une solution à un problème qui survient après la rotation (l'image rectangulaire ne convient pas à ImagView) mais elle couvre également votre problème. Bien que cette solution ait une animation pour le meilleur ou pour le pire
Obtenir les paramètres d'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 en un clic sur un bouton Comme ceci
Et le code à exécuter lorsque nous voulons faire pivoter ImageView
Cette solution est suffisante pour le problème ci-dessus, bien que cela réduise l'imageView même si ce n'est pas nécessaire (lorsque la hauteur est inférieure à la largeur) .Si cela vous dérange, vous pouvez ajouter un autre opérateur ternaire dans scaleX / scaleY.
la source
Je pense que la meilleure méthode :)
la source
Faites pivoter une image dans Android avec un délai:
la source
essayez ceci sur une vue personnalisée
la source
voici une belle solution pour mettre un dessin pivoté pour une imageView:
usage:
une autre alternative:
aussi, si vous souhaitez faire pivoter le bitmap, mais que vous avez peur du MOO, vous pouvez utiliser une solution NDK que j'ai créée ici
la source
Si vous souhaitez uniquement faire pivoter la vue visuellement, vous pouvez utiliser:
la source
Pour Kotlin,
Cela fera pivoter l'imageView plutôt que de faire pivoter l'image
Aussi, bien que ce soit une méthode en
View
classe. Vous pouvez donc pratiquement faire pivoter n'importe quelle vue en l'utilisant.la source
Malheureusement, je ne pense pas qu'il y en ait. La
Matrix
classe est responsable de toutes les manipulations d'image, qu'il s'agisse de rotation, de rétrécissement / de croissance, d'inclinaison, etc.http://developer.android.com/reference/android/graphics/Matrix.html
Mes excuses, mais je ne peux pas penser à une alternative. Peut-être que quelqu'un d'autre pourrait le faire, mais les fois où j'ai eu à manipuler une image, j'ai utilisé une matrice.
Bonne chance!
la source
Une autre solution possible est de créer votre propre vue Image personnalisée (par exemple
RotateableImageView extends ImageView
) ... et de remplacer onDraw () pour faire pivoter le canevas / les bitmaps avant de les redéfinir sur le canevas. N'oubliez pas de restaurer le canevas.Mais si vous prévoyez de ne faire pivoter qu'une seule instance de vue d'image, votre solution devrait être suffisante.
la source
sans matrice et animé:
la source
écrivez simplement ceci dans votre onactivityResult
la source
Essayez ce code 100% fonctionnel;
Sur le bouton de rotation, cliquez sur écrire ce code:
la source
Plutôt que de convertir l'image en bitmap, puis de la faire pivoter, essayez de faire pivoter la vue directe de l'image comme le code ci-dessous.
la source
Suivez la réponse ci-dessous pour une rotation continue d'une vue d'image
Si le bouton de rotation est cliqué
la source
si vous voulez faire pivoter une image de 180 degrés, mettez ces deux valeurs dans la balise imageview: -
Explication: - scaleX = 1 et scaleY = 1 représentent son état normal mais si nous mettons -1 sur la propriété scaleX / scaleY, il sera alors pivoté de 180 degrés
la source
comment utiliser?
la source
Vous pouvez simplement utiliser l' attribut de rotation d' ImageView
Voici l'attribut d'ImageView avec les détails de la source Android
la source