Я использую следующий код для поворота изображения в ImageView на угол. Есть ли более простой и менее сложный метод?
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);
Ответы:
Еще один простой способ поворота
ImageView
:ОБНОВЛЕНИЕ:
Требуется импорт:
Код: (Предполагая
imageView
,angle
,pivotX
иpivotY
уже определены)Этот метод не требует создания нового растрового изображения каждый раз.
источник
ImageView
значениях «S:matrix.postRotate( 180f, imageView.getDrawable().getBounds().width()/2, imageView.getDrawable().getBounds().height()/2);
ImageView
«Ssrc
атрибут.getDrawable()
возвращался нуль для меня , пока я не понял , что я поставил наImageView
«Sbackground
атрибут вместоsrc
. лицевая сторонаmImageView.setRotation(angle)
с API> = 11источник
ViewPropertyAnimator
, что используется какaView.animate().rotation(20).start()
rotationBy()
. Например,view.animate().rotationBy(180f).start()
. Но это становится проблематичным, если на представление нажимают последовательно.Если вы поддерживаете API 11 или выше, вы можете просто использовать следующий атрибут XML:
Он может отображаться некорректно в предварительном просмотре XML для Android Studio, но работает должным образом.
источник
background
чтобы увидеть эффект.Есть два способа сделать это:
1 Использование
Matrix
для создания нового растрового изображения:2 Использование
RotateAnimation
на которыеView
вы хотите повернуть, и убедитесь , что набор анимации дляfillAfter=true
,duration=0
иfromDegrees=toDgrees
и надуйте анимацию в коде:
источник
Я знаю, что это безумно поздно, но это было полезно для меня, так что это может помочь другим.
Начиная с API 11, вы можете программно установить абсолютное вращение ImageView, используя
imageView.setRotation(angleInDegrees);
метод.Под абсолютным я подразумеваю, что вы можете многократно вызывать эту функцию, не отслеживая текущее вращение. То есть, если я поверну, перейдя
15F
кsetRotation()
методу, а затемsetRotation()
снова вызову30F
его, поворот изображения составит 30 градусов, а не 45 градусов.Примечание. Это действительно работает для любого подкласса объекта View , а не только для ImageView.
источник
Это моя реализация RotatableImageView . Использование очень легко: просто скопировать attrs.xml и RotatableImageView.java в свой проект и добавить RotatableImageView в макете. Установите желаемый угол поворота, используя пример: параметр угла .
Если у вас есть проблемы с отображением изображения, попробуйте изменить код в методе RotatableImageView.onDraw () или используйте метод draw ().
источник
Также можно сделать так:
получил отсюда
источник
Кроме того, если вы хотите повернуть ImageView на 180 градусов по вертикали или горизонтали, вы можете использовать
scaleY
илиscaleX
свойства и установить их в-1f
. Вот пример Kotlin:1f
значение используется для возврата ImageView в его нормальное состояние:источник
У меня есть решение этого. На самом деле это решение проблемы, которая возникает после поворота (прямоугольное изображение не подходит для ImagView), но оно также охватывает и вашу проблему. Хотя в этом решении есть анимация к лучшему или к худшему
Получение параметров imageView невозможно при инициализации действия. Для этого, пожалуйста, обратитесь к этому решению ИЛИ установите размеры при нажатии кнопки, например
И код для запуска, когда мы хотим повернуть ImageView
Этого решения достаточно для указанной выше Задачи. Хотя оно уменьшит изображение, даже если в этом нет необходимости (если высота меньше, чем Ширина). Если это вас беспокоит, вы можете добавить еще один троичный оператор внутри scaleX / scaleY.
источник
Я думаю, что лучший способ :)
источник
Поворот изображения в Android с задержкой:
источник
попробуйте это в пользовательском представлении
источник
Вот хорошее решение для размещения повернутого рисованного для imageView:
использование:
другая альтернатива:
Кроме того, если вы хотите повернуть растровое изображение, но боитесь OOM, вы можете использовать решение NDK, которое я сделал здесь
источник
Если вы хотите повернуть вид только визуально, вы можете использовать:
источник
Для Котлина
Это будет вращать imageView, а не вращать изображение
Кроме того, хотя это метод в
View
классе. Таким образом, вы можете вращать любой вид, используя его.источник
К сожалению, я не думаю, что есть.
Matrix
Класс отвечает за все манипуляции изображения, будь то поворот, сокращается / растет, перекос и т.д.http://developer.android.com/reference/android/graphics/Matrix.html
Мои извинения, но я не могу придумать альтернативы. Может быть, кто-то еще сможет, но когда мне приходилось манипулировать изображением, я использовал Матрицу.
Удачи!
источник
Другим возможным решением является создание собственного пользовательского представления изображений (скажем
RotateableImageView extends ImageView
) ... и переопределение onDraw () для поворота холста / растровых изображений перед воспроизведением на холсте. Не забудьте восстановить холст обратно.Но если вы собираетесь вращать только один экземпляр изображения, ваше решение должно быть достаточно хорошим.
источник
без матрицы и анимации:
источник
просто напишите это в своем onesctivityResult
источник
Попробуйте этот код на 100% работающий;
Нажмите кнопку поворота и напишите этот код:
источник
Вместо того, чтобы конвертировать изображение в растровое изображение, а затем повернуть его, попробуйте повернуть прямой вид изображения, как показано ниже.
источник
Следуйте приведенному ниже ответу для непрерывного вращения изображения.
Если кнопка поворота нажата
источник
если вы хотите повернуть изображение на 180 градусов, поместите эти два значения в тег imageview: -
Объяснение: - scaleX = 1 и scaleY = 1 повторяют это нормальное состояние, но если мы добавим -1 в свойство scaleX / scaleY, то оно будет повернуто на 180 градусов
источник
как пользоваться?
источник
Вы можете просто использовать атрибут поворота ImageView
Ниже приведен атрибут из ImageView с подробностями из источника Android
источник