- Android: поворот изображения в imageview на угол
- 18 ответов
- RotateAnimation и
- rotate_center.xml
- rotate_corner.xml
- Метроном
- Аттракцион
- Бутылочка
- Спиннер (Fidget Spinner)
- Rotate imageview android studio
- Android ImageView Tutorial
- Android ImageView Setting Image in XML
- Android ImageView Setting Image Programmatically
- ImageView ScaleType
- Android ImageView Attributes
- Android ImageView OnClick Listener
- Android ImageView Rounded Corners
- Android ImageView Rotate Image
- Android ImageView Animation
- Applying animation to ImageView
- Rotation animation
- Scale animation
- Slide animation
- About
- ImageView
- Общая информация
- Метод setImageResource()
- Метод setImageBitmap()
- Метод setImageDrawable()
- Метод setImageURI()
- Другие методы
- Масштабирование через свойство Scale Type
- Атрибут android:adjustViewBounds=»true»
- Загрузка изображения из галереи
- Получить размеры ImageView — будьте осторожны
- Копирование изображений между ImageView
- Примеры
Android: поворот изображения в imageview на угол
Я использую следующий код для поворота изображения в ImageView на угол. Существует ли какой-либо более простой и менее сложный метод.
18 ответов
еще один простой способ повернуть ImageView :
обновление:
Необходимый импорт:
Код: (Если imageView , angle , pivotX & pivotY уже определены)
этот метод не требует создания нового растрового изображения каждый раз.
примечание: для поворота ImageView on ontouch во время выполнения вы можете set onTouchListener on ImageView & повернуть его, добавив последний два строки (т. е. postRotate матрицу и установить его на imageView) в приведенном выше коде раздел в вашем сенсорном прослушивателе ACTION_MOVE часть.
mImageView.setRotation(angle) с API>=11
Если вы поддерживаете API 11 или выше, вы можете просто использовать следующий атрибут XML:
он может отображаться неправильно в Android Studio xml preview, но он работает так, как ожидалось.
есть два способа сделать это:
1, Используя Matrix для создания нового растрового изображения:
2 использовать RotateAnimation на View вы хотите повернуть, и убедитесь, что анимация для fillAfter=true , duration=0 и fromDegrees=toDgrees
и раздуть анимацию в коде:
Я знаю, что это безумно поздно, но это было полезно для меня, так что это может помочь другим.
начиная с API 11, вы можете установить абсолютное вращение ImageView программно с помощью imageView.setRotation(angleInDegrees); метод.
по абсолюту, я имею в виду, что вы можете неоднократно вызывать эту функцию без необходимости отслеживать текущее вращение. То есть, если я вращаюсь, проходя 15F до setRotation() метод, а затем вызвать setRotation() снова 30F , вращение изображения с 30 градусами, не 45 градусов.
Примечание: это действительно работает для любого подкласса посмотреть объект, а не только ImageView.
Это мой реализация RotatableImageView. Использование очень просто: Просто скопируйте attrs.в XML и RotatableImageView.java в ваш проект и добавьте RotatableImageView в свой макет. Задайте угол поворота с помощью пример:угол
попробуйте это на пользовательском представлении
вот хорошее решение для размещения повернутого drawable для imageView:
кроме того, если вы хотите повернуть растровое изображение, но боитесь OOM, вы можете использовать решение NDK, которое я сделал здесь
просто напишите это в своем onactivityResult
у меня есть решение для этого. На самом деле это решение проблемы, которая возникает после вращения (прямоугольное изображение не соответствует ImagView) но это касается и вашей проблемы.. Хотя это решение имеет анимацию к лучшему или к худшему
получение параметров imageView невозможно при инициализации активности Для этого, пожалуйста, обратитесь к этому решение или установите размеры на onClick кнопки как это
и код для запуска, когда мы хотим повернуть ImageView
этого решения достаточно для проблемы выше.Хотя он будет сжимать imageView, даже если это не необходимо(когда высота меньше ширины).Если это вас беспокоит, вы можете добавить еще один тернарный оператор внутри scaleX/scaleY.
Я думаю, что лучший способ 🙂
к сожалению, я не думаю, что есть. The Matrix класс отвечает за все манипуляции с изображениями, будь то вращение, сжатие/рост, перекос и т. д.
мои извинения, но я не могу придумать альтернативу. Может быть, кто-то другой и смог бы, но когда мне приходилось манипулировать образом, я использовал матрицу.
другим возможным решением является создание собственного пользовательского представления изображения(скажем RotateableImageView extends ImageView ). и переопределите onDraw (), чтобы повернуть холст/растровые изображения перед повторным переходом на холст.Не забудьте восстановить холст.
но если вы собираетесь повернуть только один экземпляр изображения,ваше решение должно быть достаточно хорошим.
Источник
RotateAnimation и
Используйте атрибуты fromDegrees и toDegrees внутри тега , чтобы задать начальный и конечный углы поворота вокруг опорной точки. Опорная точка указывается с помощью атрибутов pivotX и pivotY, которые содержат процентные значения относительно ширины и высоты объекта Drawable соответственно.
Рассмотрим примеры вращения объекта. Создадим проект, в котором ImageView будет постоянно вращаться либо относительно своего центра, либо вокруг своего угла. В папке res/anim создаем два файла:
rotate_center.xml
rotate_corner.xml
Разместим на форме две кнопки и ImageView:
Теперь код для анимации:
Запускайте проект и вращайте картинку.
Класс RotateAnimation наследуется от класса Animation и отвечает за анимацию вращения.
Метроном
Добавим на экран ImageButton, который будет объектом вращения.
Напишем обработчик щелчка кнопки:
Числа для вращения я подбирал наугад, можете использовать свои значения, зависящие от размеров экрана и т.п. В данном примере движение картинки напоминает работу метронома.
Аттракцион
Следующая анимация напомнила мне аттракцион в парке развлечений. За основу взять пример из урока, где мы учились выводить текст вдоль окружности.
Если нужно, чтобы был эффект вращения текста внутри окружности, то следует поколдовать с координатами, например, у меня вышло так:
Бутылочка
Можно написать даже простую игру «Бутылочка». Понадобится изображение бутылки с молоком, которую потом отдадим котёнку.
При нажатии на бутылку запускается вращение.
Не забыли про мою просьбу отдать бутылку котёнку?
Спиннер (Fidget Spinner)
Крутить можно не только бутылку, но и спиннер. На скорую руку написал приложение.
Картинку рисовал в векторе, а также прикрутил к веб-странице.
Источник
Rotate imageview android studio
Android ImageView Tutorial
November 07, 2017
Android ImageView widget is used to display images such as drawable and bitmap resources. ImageView widget provides attributes using which tint can be applied to images and images can be scaled.
This tutorials explains how to add ImageView in xml layout and to constraint layout programmatically, handle click events, use various scale types and attributes. The tutorial also shows how to display round-cornered and rotated images. It shows how to define animations in xml and apply to ImageView to rotate, scales and slide images.
Android ImageView Setting Image in XML
Below layout xml shows ImageView definition and setting image using src attribute.
Android ImageView Setting Image Programmatically
Below code show how to add ImageView programmatically. The example adds image view to constraint layout and sets constraints to the image being added.
ImageView ScaleType
Using scaleType attribute of ImageView, image can be scaled in different ways to its bounds. Below picture shows image scaling using various scale types such as CENTER, CENTER_CROP, CENTER_INSIDE, FIT_CENTER, FIT_END, FIT_START, FIT_XY, and MATRIX. FIT_XY doesn’t maintain aspect ratio.
Android ImageView Attributes
Attribute android:adjustViewBounds is used to indicate whether aspect ratio of image be maintained or not with different scale types. Setting android:adjustViewBounds to true indicates that aspect ratio of the image be maintained.
Attributes android:baseline and android:baselineAlignBottom are realted to baseline of image within the view.
Setting attribute android:cropToPadding to makes image be cropped to fit within padding.
To set tinting color and tint mode of image, attributes android:tint and android:tintMode are used.
Android ImageView OnClick Listener
Below example sets attributes in click event handler of image view.
Android ImageView Rounded Corners
There are several ways to display round-cornered image. You can display images as round-cornered images using card view, below layout shows just that.
Android ImageView Rotate Image
You can rotate image in image view using Matrix and calling postRotate on it as shown below.
Android ImageView Animation
You can define animations in xml, load the animation using AnimationUtils and apply it to image view as shown below.
Applying animation to ImageView
Rotation animation
On applying below animation to image view, image gets rotated 360 degrees for the duration of 2000 ms.
Scale animation
On applying below animation to image view, image scales from 0 to full height and width for the duration of 900 ms
Slide animation
About
Android app development tutorials and web app development tutorials with programming examples and code samples.
Источник
ImageView
Общая информация
Компонент ImageView предназначен для отображения изображений. Находится в разделе Widgets.
Для загрузки изображения в XML-файле используется атрибут android:src, в последнее время чаще используется атрибут app:srcCompat.
ImageView является базовым элементом-контейнером для использования графики. Можно загружать изображения из разных источников, например, из ресурсов программы, контент-провайдеров. В классе ImageView существует несколько методов для загрузки изображений:
- setImageResource(int resId) — загружает изображение по идентификатору ресурса
- setImageBitmap(Bitmap bitmap) — загружает растровое изображение
- setImageDrawable(Drawable drawable) — загружает готовое изображение
- setImageURI(Uri uri) — загружает изображение по его URI
Метод setImageResource()
Сначала нужно получить ссылку на ImageView, а затем используется идентификатор изображения из ресурсов:
Метод setImageBitmap()
Используется класс BitmapFactory для чтения ресурса изображения в объект Bitmap, а затем в ImageView указывается полученный Bitmap. Могут быть и другие варианты.
Метод setImageDrawable()
Если у вас есть готовое изображение, например, на SD-карте, то его можно использовать в качестве объекта Drawable.
Drawable можно получить и из ресурсов, хотя такой код выглядит избыточным, если можно сразу вызвать setImageResource().
Метод setImageURI()
Берётся URI файла изображения и используется в качестве источника изображения. Этот способ годится для работы с локальными изображениями.
Загружаем Drawable через URI.
Другие методы
Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().
Масштабирование через свойство Scale Type
Для масштабирования картинки в ImageView есть свойство Scale Type и соответствующий ему атрибут android:scaleType и перечисление ImageView.ScaleType.
- CENTER
- CENTER_CROP
- CENTER_INSIDE
- FIT_CENTER
- FIT_START
- FIT_END
- FIT_XY
- MATRIX
Чтобы увидеть разницу между разными режимами, желательно использовать большую картинку, превосходящую по ширине экрана устройства. Допустим, у нас есть простенькая разметка:
Для наглядности я задал красный цвет для фона ImageView.
Режим android:scaleType=»center» выводит картинку в центре без масштабирования. Если у вас будет картинка большего размера, то края могут быть обрезаны.
Режим android:scaleType=»centerCrop» также размещает картинку в центре, но учитывает ширину или высоту контейнера. Режим попытается сделать так, чтобы ширина (или высота) картинки совпала с шириной (или высотой) контейнера, а остальное обрезается.
Режим android:scaleType=»centerInside» масштабирует картинку, сохраняя пропорции. Можно увидеть задний фон контейнера, если его размеры отличаются от размера картинки.
Режим android:scaleType=»fitCenter» (по умолчанию) похож на предыдущий, но может не сохранять пропорции.
Если выбрать режим android:scaleType=»fitStart», то картинка прижимается к левому верхнему углу и таким образом заполняет верхнюю половину контейнера.
Значение android:scaleType=»fitEnd» сместит картинку в нижнюю часть контейнера.
Режим android:scaleType=»fitXY» растягивает/сжимает картинку, чтобы подогнать её к контейнеру. Может получиться вытянутая картинка, поэтому будьте осторожны.
Последний атрибут android:scaleType=»matrix» вывел картинку без изменений в левом верхнем углу с обрезанными краями.
Атрибут android:adjustViewBounds=»true»
При использовании атрибута scaleType=»fitCenter» из предыдущего примера Android вычисляет размеры самой картинки, игнорируя размеры ImageView. В этом случае ваша разметка может «поехать». Атрибут adjustViewBounds заставляет картинку подчиниться размеру компонента-контейнера. В некоторых случаях это может не сработать, например, если у ImageView установлен атрибут layout_width=»0dip». В таком случае поместите ImageView в RelativeLayout или FrameLayout и используйте значение 0dip для этих контейнеров.
Загрузка изображения из галереи
Предположим, у вас есть на экране компонент ImageView, и вы хотите загрузить в него какое-нибудь изображение из галереи по нажатию кнопки:
Намерение ACTION_PICK вызывает отображение галереи всех изображений, хранящихся на телефоне, позволяя выбрать одно изображение. При этом возвращается адрес URI, определяющий местоположение выбранного изображения. Для его получения используется метод getData(). Далее для преобразования URI-адреса в соответствующий экземпляр класса Bitmap используется специальный метод Media.getBitmap(). И у нас появляется возможность установить изображение в ImageView при помощи setImageBitmap().
На самом деле можно поступить ещё проще и использовать метод setImageURI.
Сравните с предыдущим примером — чувствуете разницу? Тем не менее, приходится часто наблюдать подобный избыточный код во многих проектах. Это связано с тем, что метод порой кэширует адрес и не происходит изменений. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri.
В последних версиях системных эмуляторов два примера не работают. Проверяйте на реальных устройствах.
Получить размеры ImageView — будьте осторожны
У элемента ImageView есть два метода getWidth() и getHeight(), позволяющие получить его ширину и высоту. Но если вы попробуете вызвать указанные методы сразу в методе onCreate(), то они возвратят нулевые значения. Можно добавить кнопку и вызвать данные методы через нажатие, тогда будут получены правильные результаты. Либо использовать другой метод активности, который наступает позже.
Копирование изображений между ImageView
Если вам надо скопировать изображение из одного ImageView в другой, то можно получить объект Drawable через метод getDrawable() и присвоить ему второму компоненту.
Примеры
В моих статьях можно найти примеры использования ImageView.
Источник