Как подобрать изображение произвольного размера к ImageView
?
Когда:
- Первоначально
ImageView
размеры 250dp * 250dp - Размер изображения должен быть увеличен до 250dp
- Изображение должно сохранять соотношение сторон
- Этих
ImageView
размеры должны соответствовать размерам масштабируемого изображения после масштабирования
Например, для изображения 100 * 150 изображение ImageView
должно быть 166 * 250.
Например, для изображения 150 * 100 изображение и ImageView
должно быть 250 * 166.
Если я установлю границы как
<ImageView
android:id="@+id/picture"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:adjustViewBounds="true" />
изображения вписываются в ImageView
, но ImageView
всегда 250dp * 250dp.
ImageView
изображения? Например, изображение 100dp x 150dp будет масштабироватьсяImageView
до тех же размеров ? Или вы имеете в виду, как масштабировать изображение доImageView
границ. Например, изображение 1000dp x 875dp будет масштабировано до 250dp x 250dp. Вам нужно поддерживать соотношение сторон?Ответы:
(Ответ был сильно изменен после пояснений к исходному вопросу)
После разъяснений:
это не может быть сделано только в XML . Невозможно масштабировать как изображение, так и
ImageView
так, чтобы одно измерение изображения всегда было 250dp иImageView
имело те же размеры, что и изображение.Этот код шкала
Drawable
соединяемого ,ImageView
чтобы остаться в квадрате , как 250dp х 250dp с одним размером точно 250dp и сохранением пропорций. ЗатемImageView
размер изменяется в соответствии с размерами масштабированного изображения. Код используется в деятельности. Я проверил это через обработчик нажатия кнопки.Наслаждаться. :)
XML-код для
ImageView
:Благодаря этому обсуждению для кода масштабирования:
http://www.anddev.org/resize_and_rotate_image_-_example-t621.html
ОБНОВЛЕНИЕ 7 ноября 2012:
добавлена проверка нулевого указателя, как это предлагается в комментариях
источник
ImageView
, а не оба.Может не быть ответом на этот конкретный вопрос, но если кто-то, как и я, ищет ответ, как подогнать изображение в ImageView с ограниченным размером (например,
maxWidth
), сохранив соотношение сторон, а затем избавиться от чрезмерного пространства, занимаемого ImageView, тогда самое простое решение - использовать следующие свойства в XML:источник
источник
Код ниже делает растровое изображение идеально с таким же размером изображения. Получите высоту и ширину растрового изображения, а затем рассчитайте новую высоту и ширину с помощью параметров изображения. Это даст вам необходимое изображение с лучшим соотношением сторон.
наслаждаться.
источник
попробуйте добавить
android:scaleType="fitXY"
в свойImageView
.источник
fitXY
почти всегда меняет соотношение сторон изображения. OP четко упоминает, что соотношение сторон ДОЛЖНО поддерживаться.После поиска в течение дня, я думаю, что это самое простое решение:
источник
adjustViewBounds
в XMLЛучшее решение, которое работает в большинстве случаев, это
Вот пример:
источник
все это можно сделать с помощью XML ... другие методы кажутся довольно сложными. В любом случае, вы просто устанавливаете высоту на то, что вам нужно в dp, а затем устанавливаете ширину для переноса контента или наоборот. Используйте scaleType fitCenter, чтобы настроить размер изображения.
источник
Используйте этот код:
источник
Отредактированный ответ Ярно Аргиландерса :
Как подогнать изображение под ваши ширину и высоту:
1) Инициализировать ImageView и установить изображение:
2) Теперь измените размер:
Отредактированный
scaleImage
метод: ( вы можете заменить ОЖИДАЕМЫЕ ограничивающие значения )И .xml:
источник
Это сделало это для моего случая.
источник
если он не работает, замените android: background на android: src
Android: SRC сыграет главную хитрость
это работает хорошо, как шарм
источник
Мне нужно было иметь ImageView и Bitmap, поэтому Bitmap масштабируется до размера ImageView, а размер ImageView такой же, как и у масштабированного Bitmap :).
Я просматривал этот пост, чтобы узнать, как это сделать, и, наконец, сделал то, что хочу, но не так, как описано здесь.
а затем в методе onCreateView
а затем код layoutImageView ()
В результате изображение идеально помещается внутрь, сохраняя пропорции, и не имеет лишних пикселей из ImageView, когда внутри растровое изображение.
результат
Важно, чтобы ImageView имел wrap_content и AdjustViewBounds в true, тогда setMaxWidth и setMaxHeight будут работать, это написано в исходном коде ImageView,
источник
Мне нужно было сделать это в макете ограничений с помощью Picasso, поэтому я собрал воедино некоторые из приведенных выше ответов и нашел это решение (я уже знаю соотношение сторон загружаемого изображения, так что это помогает):
Вызывается в моем коде активности где-то после setContentView (...)
В моем XML
Обратите внимание на отсутствие атрибута constraintBottom_toBottomOf. ImageLoader - это мой собственный статический класс для загрузки утилит, методов и констант.
источник
Я использую очень простое решение. Вот мой код:
Мои картинки добавляются динамически в сетку. Когда вы делаете эти настройки для просмотра изображений, изображение может автоматически отображаться в соотношении 1: 1.
источник
Используйте Простую математику, чтобы изменить размер изображения. Либо вы можете изменить размер,
ImageView
либо вы можете изменить размер нарисованного изображения, чем установленоImageView
. найдите ширину и высоту вашего растрового изображения, которое вы хотите установить,ImageView
и вызовите нужный метод. Предположим, что ваша ширина 500 больше, чем высота, чем метод вызоваВы используете этот класс для изменения размера растрового изображения.
XML-код
источник
Быстрый ответ:
источник