Imageview — Android размер изображения -1

Содержание
Цукерберг рекомендует:  Настройка Webpack для быстрой front-end разработки

Представление изображений в Android

Одним из наиболее распространенных источников графических ресурсов являются файлы изображений. Android поддерживает следующие форматы файлов : .png (предпочтителен), .jpg (приемлем), .gif (нежелателен). Для графических файлов в проекте уже по умолчанию создана папка res/drawable. При добавлении графических файлов в эту папку для каждого из них Android создает идентификатор ресурса (int) R.drawable.image. После этого ресурс можно использовать в приложении.

Для работы с изображениями создадим приложение/модуль p03images. Процесс создания модулей (приложений) подробно рассмотрен здесь. В этом простом примере по работе с изображениями рассмотрим вопросы добавления изображений в проект, представление изображений в интерфейсе и динамическую смену изображений. Структура модуля с уже добавленными изображениями представлена на следующем скриншоте.

Итак, в папку res/drawable были добавлены два изображения в виде стрелок (arrow_left.png, arrow_right.png) и три фото московских усадеб : Коломенское (kolomenskoye.jpg), Кусково (kuskovo.jpg) и Царицыно (tsaritsyno.jpg).

Добавление изображения в drawable

Рассмотрим два способа добавления графического изображения в проект. При первом способе будет использоваться мастер размещения изображения. При втором способе будет выполняться обычное копирование.

Сначала добавим в папку «drawable» изображения стрелок arrow_left.png, arrow_right.png. Для этого выделяем модуль p03images, открываем контекстное меню правой клавишей мыши и выбираем New / Image asset. В открывшемся диалоговом окне выполняем следующие действия :

  1. В поле «Icon Type» выбираем «Action Bar and Tab Icons».
  2. В поле Name определяем наименование графического ресурса.
  3. В поле Asset Type указываем тип изображения.
  4. В поле Path указываем путь к файлу изображения. Можно открыть вспомогательное диалоговое окно выбора файла нажатием на кнопку с многоточием.
  5. Нажимаем кнопку Next, в результате чего будет открыто следующее диалоговое окно, в котором никаких изменений вносить не требуется. Завершаем процесс нажатием на кнопку Finish.

Android Studio автоматически сгенерирует объекты изображения с различными разрешениями. При этом для каждого разрешения будет создана своя папка (директория) типа res/drawable-xxx. Например, drawable-hdpi, drawable-mdpi, drawable-ldpi и прочее. В каждую папку будет помещено графическое изображение. В среде разработки студио в структуре модуля это не видно; необходимо перейти в проводник.

Теперь, чтобы сослаться на данный ресурс для его отображения на кнопке btnRight типа ImageButton, можно использовать следующий синтаксис в XML-файле разметки интерфейса :

Здесь следует несколько слов сказать о том, что такое ldpi, mdpi, hdpi и т.д. Данные аббревиатуры, заканчивающие на символы dpi, используются в обозначении наименований ресурсов (наименований папок). Эти обозначения связаны с разрешениями экрана.

Разрешение экрана

Разрешение экрана определяется параметром DPI (Dots Per Inch) — это количество точек на дюйм. Совершенно ясно, что нет никакого смысла рисовать высококачественную большую тяжёлую графику на экран с разрешением 320х240 пикселей, а потому в Android предусмотрены некоторые категории, каждая из которых совпадает с теми или иными аппаратными характеристиками устройства.

Приведу соответствие обозначений разрешениям экрана :

  • Low DPI (LDPI) = 120DPI.
  • Medium DPI (MDPI) = 160DPI.
  • High DPI (HDPI) = 240DPI (Nexus S, SGS2). Сокращение SGS2 обозначает Samsung Galaxy S2.
  • Extra High DPI (XHDPI) = 320DPI (Galaxy Nexus, Nexus 4, SGS3).
  • Extra Extra High DPI (XXHDPI) = 480DPI (HTC One и SGS4).

Разработчикам приходится рисовать графику сразу под несколько разрешений. Скажем, обычная иконка приложения для MDPI должна быть 48×48 пикселей, для HDPI — 72×72, для XHDPI уже 96×96.

Простое копирование изображения в drawable

При простом копировании изображения в папку res/drawable используется буфер обмена. Т.е. сначала необходимо в проводнике выполнить копирование изображения в буфер обмена с помощью горячих клавиш Ctrl+C. После этого в модуле/проекте выделить запись res/drawable и нажать Ctrl+V, либо открыть контекстное меню и выбрать пункт Paste. Добавим, таким образом, в проект изображения усадеб. При копировании изображения Studio спросит Вас о директории, в которой файл изображения будет размещен :

Поскольку трансформировать изображения под разные разрешения не будем, то выбираем директорию res/drawable и нажимаем кнопку ОК. После этого, Studio откроет второе диалоговое окно и попросит подтверждения. Здесь без каких-либо изменений нажимаем кнопку ОК. При желании Вы можете изменить, к примеру, наименование файла.

Таким образом, в проект/модуль были внесены все файлы изображений. Теперь необходимо определить интерфейс приложения, в который включим две кнопки для «пролиставания» изображений и компонент ImageView для представления изображений московских усадеб.

Определение графического интерфейса

На следующем скриншоте представлен интерфейс приложения. В центре окна размещен компонент ImageView с привязками к трём сторонам. В нижней части размещаются две кнопки типа ImageButton. Поскольку вопросы разметки интерфейса и привязки компонентов были рассмотрены на странице Layout интерфейса приложения Android, то здесь не будем на этом заострять наше внимание.

На кнопки нанесены соответствующие изображения. Пример определения изображения на кнопке типа ImageButton был приведен выше. Точно также можно определить изображение для компонента ImageView. Это можно выполнить либо непосредственно в файле разметки XML (Text режим), либо в атрибутах компонента (Design режим). Теперь необходимо несколько слов сказать о компоненте ImageView.

Компонент представления изображения, ImageView

Для отображение изображения в интерфейсе Android приложения используется компонент ImageView, расположенной в палитре Common. ImageView является базовым элементом-контейнером для использования графики. Изображения в компонент можно загружать из разных источников; например, из ресурсов программы, из галереи, из контент-провайдеров. В классе ImageView имеется несколько методов для загрузки изображений :

• setImageResource(int) : представление изображения по идентификатору ресурса;
• setImageBitmap(Bitmap) : представление растрового изображения;
• setImageDrawable(Drawable) : представление изображения типа png, jpg;
• setImageURI(Uri) : загрузка изображения по URI.

Примеры методов представления изображений

Небольшой комментарий к использованию методов. Самый простой способ загрузки в ImageView изображения из приложения связан с использованием ресурсов и метода setImageResource.

Для загрузки растрового приложения, если оно отсутствует в приложении, его необходимо создать с использованием BitmapFactory. Формат изображения Bitmap – это представление изображения в памяти. Объект Bitmap хранит в себе информацию о каждом пикселе изображения, поэтому может «весить» в десятки/сотни раз больше, чем файл с изображением .png/.jpg.

Drawable — это объект, который может быть изображен в каком-либо View. Drawable не обязательно является изображением. Это может быть, например, форма (shape), созданная в ресурсах, или комбинация изображений. Объект Drawable можно получить из ресурсного изображения методом getDrawable. Можно также использовать метод Drawable.createFromPath(String).

Ну и в заключение использование метода загрузки файла с использованием android.net.Uri. В примере используется путь, определенный в модуле p03images (пакет com.android.test.p03images) и файл ресурсов R.drawable.tsaritsyno.

Прозрачность изображения

Иногда необходимо будет изменить прозрачность изображения. Например, когда оно используется в качестве фонового изображения. В этом случае используйте метод setAlpha(int alpha) объекта Drawable. Диапазон значений параметра alpha от 0 (полностью прозрачный) до 255 (непрозрачный). Пример :

Цукерберг рекомендует:  Портфолио на HTML5

Масштабирование изображение

Существуют несколько способов масштабирования изображения в ImageView. Атрибут компонента android:scaleType определяет способ масштабирования. Динамически способ масштабирования можно изменить методом ImageView.setScaleType(). Ниже представлены некоторые способы масштабирования изображения :

andro . При масштабировании изображения с использованием fitCenter выполняется масштабирование с сохранением пропорций. При этом одна из сторон будет равной соответствующей стороне ImageView. Для наглядности в компоненте ImageView был определен черный цвет фона.

andro . В этом режиме изображение размещается в центре компонента без масштабирования (сжатия и растягивания).

andro с размещением изображения в нижней части компонента.

andro . Изображение масштабируется без сохранения пропорций таким образом, чтобы размеры сторон изображения совпадали с размерами сторон ImageView.

andro . Изображение масштабируется равномерно с сохранением пропорций. При этом высота и ширина изображения будут больше или равны высоте и ширине ImageView. После этого центр изображения устанавливается в центре ImageView.

Кроме представленных выше масштабирований ещё имеются масштабирование «matrix» с использованием матрицы, определяемой методом ImageView.setImageMatrix(), и масштабирование «centerInside», которое равномерно с сохранением пропорций масштабирует изображение и устанавливает изображение в центре ImageView (при этом высота и ширина изображения будут меньше или равны высоте и ширине ImageView).

Программный модуль MainActivity

После того, как интерфейс приложения определен, необходимо к кнопкам подключить соответствующие обработчики событий. Для этого открываем модуль MainActivity в режиме редактирования и вносим следующие изменения :

  • определяем целочисленную переменную imageIDX, используемую для индексации изображений усадеб;
  • создаем метод getImageID(), возвращающий идентификатор графического ресурса изображения в зависимости от текущего значения imageIDX;
  • создаем метод changeImage(), отображающий текущее графическое изображение;
  • подключаем к кнопкам обработчики событий. При нажатии на кнопку сначала изменяется значение текущего идентификатора imageIDX, и после этого вызывается метод changeImage().

Полагаю, что код модуля MainActivity тривиально прост и не требует особых комментариев.

После старта приложения Вы должны увидеть следующий интерфейс :

Исходный код примера не приводится, всё описано подробно. Поэтому у Вас не должно возникнуть сложностей самостоятельно повторить этот пример.

Использование фонового изображения в разметке интерфейса активности Android приложения представлено здесь.

Использование изображений/иконок в меню Android приложений представлено здесь.

ImageView — показываем изображения.

Урок #10

ImageView — View , предназначенный для отображения изображений.

Существует несколько способов загрузки изображений в ImageView :

  • Из ресурсов приложения в XML или из Java-кода
  • Установкой Bitmap
  • Установкой Drawable
  • С использованием URI

Для начала давайте добавим ImageView в XML:

Если вы сейчас запустите приложение, то увидите, что ничего не отображается — изображение-то мы не задали!

Давайте по порядку рассмотрим различные способы.

Установка изображения из ресурсов

Самый простой способ установить изображение — ссылкой на ресурс из XML-верстки. Для этого у ImageView есть атрибут android:src .

Однако, для начала нужно добавить изображение в ресурсы. Возьмите изображение (например, из Git-репозитория к этому уроку) и скопируйте его в ресурсы в директорию drawable :

Изображение в директории Drawable

Теперь мы можем сослаться на это изображение в атрибуте android:src у нашего ImageView :

Механизм примерно тот же, что и со строками, только вместо @string мы используем @drawable , а затем имя файла (без расширения).

Запустив приложение, вы увидите, что изображение отображается:

Отображение картинки в ImageView

Теперь давайте установим это же изображение, но уже из Java-кода. Удалите атрибут android:src :

В коде MainActivity «найдите» ImageView :

Чтобы установить изображение, нужно вызвать метод ImageView.setImageResource(int resId) . В качестве параметра, соответственно, нужно передать id ресурса.

В нашем случае это будет выглядеть следующим образом:

Запустив приложение, вы увидите, что ничего не изменилось (ведь этот метод эквивалентен предыдущему):

Изображение в ImageView, установленное из Java-кода

Установка Bitmap

Bitmap — это представление изображения в памяти.

Объект Bitmap хранит в себе информацию о каждом пикселе изображения.

Внимание: Bitmap может занимать очень много места в памяти! Файлы изображений обычно хранятся в форматах со сжатием (JPG/PNG), и поэтому занимают относительно мало места. Bitmap же хранит информацию о каждом пикселе, поэтому может «весить» в десятки/сотни раз больше, чем файл с изображением.

Итак, мы хотим установить изображение, используя Bitmap .

Сначала нужно его откуда-то взять. Самый простой способ — использовать метод BitmapFactory.decodeResource() , дабы создать Bitmap из ресурса.

Он принимает объект ресурсов и id ресурса.

Давайте загрузим наше изображение этим методом:

А теперь просто установим его в ImageView , используя метод ImageView.setImageBitmap() :

Результат, как и в прошлый раз, не изменится.

Установка Drawable

Drawable — это объект, который может быть отрисован в каком-либо View . Drawable не обязательно является изображением — это может быть, например, форма (shape), созданная в ресурсах, или комбинация изображений.

Предположим, что мы хотим установить в ImageView ту же самую картинку, что и раньше, но используя Drawable . В этом нам поможет класс-«обертка» над Bitmap — BitmapDrawable .

Чтобы создать BitmapDrawable , используйте конструктор, принимающий объект ресурсов и Bitmap :

И после этого метод ImageView.setImageDrawable() :

Масштабирование изображения

Существуют различные способы масштабирования изображения в ImageView . За способ масштабирования отвечает атрибут android:scaleType и метод ImageView.setScaleType() . Он принимает следующие значения:

  • center — устанавливает изображение в центре ImageView , но не масштабирует его.
  • centerCrop — равномерно (сохраняя пропорции) масштабирует изображение, высота и ширина изображения будут больше или равны высоте и ширине ImageView . После этого устанавливает изображение в центре ImageView .
  • centerInside — равномерно (сохраняя пропорции) масштабирует изображение, высота и ширина изображения будут меньше или равны высоте и ширине ImageView . После этого устанавливает изображение в центре ImageView .
  • fitCenter — масштабирует изображение, сохраняя пропорции, при этом хотя бы одна из сторон будет равна соответствующей стороне ImageView . После этого устанавливает его в центре ImageView .
  • fitEnd — масштабирует изображение, сохраняя пропорции, при этом хотя бы одна из сторон будет равна соответствующей стороне ImageView . После этого устанавливает его в правом нижнем углу ImageView .
  • fitStart — масштабирует изображение, сохраняя пропорции, при этом хотя бы одна из сторон будет равна соответствующей стороне ImageView . После этого устанавливает его в левом верхнем углу ImageView .
  • fitXY — масштабирует каждую из сторон изображения независимо (то есть не сохраняя пропорции) таким образом, чтобы стороны совпадали со сторонами ImageView .
  • matrix — масштабирует изображение, используя матрицу (задаваемую методом ImageView.setImageMatrix() ).

Как видите, вариантов масса. Давайте попробуем каждый из них.

imageview — Andro >

Добрый день, для масштабирования изображения получаю его отношение сторон таким образом:

photoW и photoH принимают значения -1.

Далее изображение загружается в ImageView следующим образом:

Загрузка происходит без ошибок, но изображение отсутствует.

Самое странное в том, что на других четырех устройствах все работает нормально и на эмуляторе тоже, разрешение на чтение и запись в файл есть. Работает на android 4.4.2, 6.0.1, 7.0, но не работает на 6.0) В чем может быть проблема?

Imageview — Android размер изображения -1

37572 просмотра

14 ответа

226 Репутация автора

Я пытаюсь получить реальный размер изображения, отображаемого в виде изображения. На самом деле мое изображение больше, чем экран, и просмотр изображений изменяет размер изображения, чтобы отобразить его. Я ищу этот новый размер.

Я пытался переопределить метод onDraw ImageView в пользовательском представлении, но я не получаю правильную высоту и ширину .

У тебя есть какие-нибудь подсказки?

Ответы (14)

плюса

9675 Репутация автора

попробуйте переопределить onMeasure(int widthMeasureSpec, int heightMeasureSpec) вместо onSizeChanged.

Автор: bhups Размещён: 04.10.2010 01:16

-1 плюса

9471 Репутация автора

Как насчет ImageView.getBackground () или ImageView.getDrawable (), затем Drawable.getBounds ()?

6 плюса

76755 Репутация автора

плюса

17744 Репутация автора

Если я вас правильно понял, вам нужен размер ImageView, чтобы соответственно масштабировать ваше изображение. Я сделал это с помощью пользовательского класса, где я переопределил onMeasure() вызов, чтобы получить ширину и высоту.

В onMeasure вы получаете ширину и высоту вашего изображения, чтобы оно соответствовало вашему виду.

Вы можете использовать LandImageView в вашем макете следующим образом:

плюса

310 Репутация автора

Попробуйте загрузить свой ресурс, используя BitmapFactory.decodeResource (ресурсы res, int id, опции BitmapFactory.Options) с классом BitmapFactory.Options (). BitmapFactory.Options() имеет флаг, который называется «inJustDecodeBounds» и дает только измерения ресурса.

Надеюсь, что это помогло.

Автор: Uri May Размещён: 24.10.2010 12:10

1 плюс

13858 Репутация автора

Я просто прохожу мимо, но надеюсь, что это по-прежнему помогает. Я предполагаю, что вы говорите о растровых изображениях в вашем imageView.

что вы хотите понять, это разница между

bmpBack.getWidth() -> это дает вам размер вашего растрового изображения и bmpBack.getScaledWidth(canvas) ; -> это даст вам размер растрового изображения, отображаемого на экране.

Я никогда не использовал ImageView, потому что относительное отображение выводило меня из себя, поэтому в итоге я просто переопределил onDraw и сделал свой холст очень похожим на opengl.

Я думаю это твоя проблема

плюса

705 Репутация автора

сначала добавьте изображения в папку ресурсов ur . и в файле xml создайте представление изображений .

плюса

51053 Репутация автора

Я искал решение, чтобы установить размер представления изображения для масштабированного изображения, чтобы предотвратить пустое пространство сверху / снизу или слева / справа (потому что размер представления не изменился, чтобы соответствовать масштабированному изображению).

То, что я нашел, чтобы сделать трюк, это использование метода, mImageView.setAdjustViewBounds(true); который приводит к правильному размеру макета. У меня нет масштабированного изображения, но я получил результат, который искал . просто если кому-то это нужно .

9 плюса

1264 Репутация автора

Я обнаружил, что предложение WarrenFaith об использовании setAdjustViewBounds работает, но мне пришлось изменить layout_width / layout_height в ImageView на «wrap_content» (с «match_parent» setAdjustViewBounds ничего не сделал). Чтобы получить желаемое поведение высоты / ширины / гравитации, мне пришлось обернуть ImageView в FrameLayout:

После этого размеры ImageView (возвращаемые getWidth () и getHeight ()) соответствуют размеру экрана изображения.

98 плюса

4151 Репутация автора

Ни один из ответов здесь фактически не отвечает на вопрос:

Из Bitmap любого размера, отображаемого с помощью ImageView , найдите фактические размеры отображаемого изображения, а не размеры поставляемого Bitmap .

  • Использование ImageView.getDrawable().getInstrinsicWidth() и getIntrinsicHeight() вернет исходные размеры.
  • Получение Drawable сквозной ImageView.getDrawable() и приведения его к BitmapDrawable , а затем с помощью BitmapDrawable.getBitmap().getWidth() и getHeight() также возвращает исходное изображение и его размеры.

Единственный способ получить фактические размеры отображаемого изображения — извлечь и использовать преобразование, Matrix используемое для отображения изображения в том виде, как оно показано. Это должно быть сделано после этапа измерения, и в приведенном здесь примере показано, что он вызывается для пользовательского Override элемента : onMeasure() ImageView

Примечание: чтобы получить преобразование изображения Matrix из кода в целом (как в an Activity ), функция ImageView.getImageMatrix() — например, myImageView.getImageMatrix()

Автор: B T Размещён: 21.03.2013 03:16

26 плюса

1103 Репутация автора

Я расширил ответ BT, чтобы создать из него статический метод и включить левое и верхнее положение изображения в ImageView:

плюса

111 Репутация автора

Я думаю, вам нужен размер изображения, видимого на экране, для этого вам просто нужно сделать это:

И сделать взглянуть на документацию методов , как: getWidht() , getHeight() , getMeasuredWidth() , getMeasuredHeight() и т.д. Вы получите , чтобы узнать , что он делает , чтобы дать вам тот размер.

РЕДАКТИРОВАТЬ: Если вы хотите, чтобы фактическое width и height изображение загружалось в imageView . Вы можете изменить вызовы методов от getMeasuredWidth() к getIntrinsicWidth() и getMeasuredHeight() в getIntrinsicHeight() это нравится:

1 плюс

68 Репутация автора

Вы можете использовать viewtreeobserver и addonDrawListener.

плюса

223 Репутация автора

Просто можно использовать этот код (в действии):

В случае, если изображение достигает концов imageView.

Как получить ширину и высоту andro > Вопрос задан: 8 лет назад Последняя активность: 5 месяцев назад

У меня есть представление изображения с некоторой высотой и шириной по умолчанию, изображения хранятся в дБ, и я хочу масштабировать изображение в соответствии с шириной высоты просмотра изображения. Поскольку я не хочу, чтобы это давало значения по умолчанию, потому что, когда я изменяю его высоту и ширину, я также должен изменить это в коде.

Я пытаюсь получить высоту и ширину ImageView, но мне возвращается 0 в обоих случаях.

это возвращает мне 0, даже если у него есть высота и ширина по умолчанию

10 ответов

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Мой ответ на этот вопрос может помочь вам:

Затем вы можете добавить свою работу по масштабированию изображения из метода onPreDraw().

Я просто установил это свойство, и теперь Android OS заботится обо всем.

Используйте это в вашем layout.xml, где вы посадили свой ImageView: D

Я мог бы получить ширину и высоту изображения по его рисованию;

Причина, по которой размеры ImageView равны 0, заключается в том, что когда вы запрашиваете их, представление все еще не выполнило шаги макета и измерения. Вы только сказали представлению, как оно будет «вести себя» в макете, но все равно не рассчитали, куда поместить каждое представление.

Как вы решаете, какой размер придать изображению? Разве вы не можете просто использовать один из встроенных вариантов масштабирования?

Сообщение в теме пользовательского интерфейса работает для меня.

Установить изображение в ImageView, сохранять пропорции и затем изменить размер ImageView, чтобы размеры изображения?

Как установить изображение произвольного размера Аня ImageView ?
Когда:

  • Первоначально ImageView размеры 250dp * 250dp
  • Больший размер Образ должен быть масштабируется вверх / вниз 250dp
  • Изображение должно сохранить свои пропорции
  • Этих ImageView размеры должны соответствовать размерам масштабируемого изображения после масштабирования

Например , для изображения 100 * 150, изображение и ImageView должно быть 166 * 250.
Например , для изображения 150 * 100, изображение и ImageView должно быть 250 * 166.

Если я установил границы, как

изображения соответствуют должным образом в ImageView , но ImageView всегда 250dp * 250dp.

Не может быть ответ на этот конкретный вопрос, но если кто — то, как и я, в поисках ответа , как уместить изображение в ImageView с ограниченным размером (например, maxWidth ) при сохранении соотношения сторон , а затем избавиться от чрезмерного пространства , занимаемого ImageView, то самое простое решение использовать следующие свойства в XML:

(Ответ на этот вопрос был сильно изменен после уточнений к первоначальному вопросу)

После уточнений:
Это не может быть сделано только в XML . Это не возможно масштабировать как изображение и ImageView таким образом , что изображения в одно измерение всегда будет 250dp и ImageView будет иметь те же размеры, что и изображение.

Этот код шкала Drawable соединяемого , ImageView чтобы остаться в квадрате , как 250dp х 250dp с одним размером точно 250dp и сохранением пропорций. Затем ImageView изменяется в соответствии с размерами масштабируемого изображения. Код используется в деятельности. Я тестировал его с помощью обработчика щелчка кнопки.

Код XML для ImageView :

UPDATE седьмой, ноябрь 2012:
Добавлена нулевая проверка указателя , как предложено в комментариях

android пример Попытка получить размер изображения в ImageView

imageview andro > (11)

Я пытаюсь получить реальный размер изображения, отображаемого в представлении изображения. На самом деле мое изображение больше, чем экран, и изображение просматривает изображение, чтобы изменить его. Я ищу новый размер.

Я попытался переопределить метод onDraw ImageView в пользовательском представлении, но я не получаю правильную высоту и ширину .

У вас есть какие-то подсказки?

сначала добавьте изображения в папку ресурсов ur . и в xml-файле создайте изображение .

Вы можете использовать viewtreeobserver viewview и addonDrawListener.

попробуйте переопределить onMeasure(int widthMeasureSpec, int heightMeasureSpec) вместо onSizeChanged.

Как насчет ImageView.getBackground () или ImageView.getDrawable (), затем Drawable.getBounds ()?

Я добавил ответ БТ, чтобы создать из него статический метод, и включить изображение влево и в верхнее положение в ImageView:

Я думаю, вам нужен размер изображения, видимый на экране, потому что вам просто нужно это сделать:

И взгляните на документацию по таким методам, как getWidht() , getHeight() , getMeasuredWidth() , getMeasuredHeight() и т. Д. Вы узнаете, что он делает, чтобы дать вам этот размер.

EDIT: Если вы хотите, чтобы фактическая width и height изображения загружались в imageView . Вы можете изменить вызовы метода из getMeasuredWidth() на getIntrinsicWidth() и getMeasuredHeight() на getIntrinsicHeight() следующим образом:

Я искал решение для установки размера изображения на масштабированное изображение, чтобы предотвратить пустое пространство сверху / снизу или влево / вправо (это приведет к тому, что размер представления не изменится в соответствии с масштабированным изображением).

То, что я нашел для этого, было использование метода mImageView.setAdjustViewBounds(true); что приводит к правильному размеру макета. У меня нет масштабного измерения изображения, но я получил результат, который искал . просто, если кому-то это нужно .

Если я получу вас правильно, вам понадобится ваше измерение ImageView, чтобы соответствующим образом масштабировать изображение. Я сделал это с помощью специального класса, где я переопределяю onMeasure() чтобы получить ширину и высоту.

В onMeasure вы получаете ширину и высоту изображения, чтобы он соответствовал вашему представлению.

Вы можете использовать LandImageView в своем макете следующим образом:

Попробуйте загрузить свой ресурс с помощью BitmapFactory.decodeResource (ресурсы res, int id, BitmapFactory.Options выбирает) с классом BitmapFactory.Options (). BitmapFactory.Options() имеет флаг, который называется «inJustDecodeBounds» и дает только размеры ресурсов.

Надеюсь, что это помогло.

Ни один из ответов здесь не отвечает на вопрос:

Из Bitmap любого размера, отображаемого ImageView , найдите фактические размеры отображаемого изображения в отличие от размеров поставляемого Bitmap .

  • Используя ImageView.getDrawable().getInstrinsicWidth() и getIntrinsicHeight() возвратят исходные размеры.
  • Получая Drawable через ImageView.getDrawable() и отбрасывая его в BitmapDrawable , а затем используя BitmapDrawable.getBitmap().getWidth() и getHeight() также возвращают исходное изображение и его размеры.

Единственный способ получить фактические размеры отображаемого изображения — извлечение и использование Matrix преобразования, используемой для отображения изображения, как показано на рисунке. Это должно быть сделано после этапа измерения, и здесь пример показывает, что он вызван в Override onMeasure() для пользовательского ImageView :

Размер изображений в ImageView андроида

December 2020

17.6k раз

У меня есть ImageView внутри ListView. Установить как это: main.xml

Это прекрасно работает, заполняя много изображений из URL с запросом HTTP. Но у меня есть проблемы с размером изображения. Я хочу, чтобы заполнить экран независимо разрешение или размер. Пробовал с разной компоновкой Hight, ширина и scaleType но не могу заставить его работать правильно.

Первое изображение, как она выглядит сейчас, второе изображение, как я хочу, чтобы она выглядела.

EDIT: попробовал с scaleType = «fitXY», который дал мне ширину 100%, но плохая высота на более длинных изображениях.

7 ответы

Вместо andro использования , andro а также в java использовании файла:

Если мы будем использовать android:src его он устанавливает изображение в соответствии с его разрешением , чтобы поместиться на экране. И если мы устанавливаем изображение в качестве фона, мы можем установить в желанной width и height

У меня была такая же проблема, и не нашли другое решение, кроме сделать мой собственный класс.

затем добавить атрибуты в какой — то файл в /values папке

и использовать этот новый Conrol как это

он будет регулировать высоту пропорционально ширине изображения

Кроме того, если вы делаете что-то еще не показанный на ваш вопрос с RelativeLayout в image.xml, это бессмысленно.

вы использовали его как:

попробовать это, у меня есть изменить некоторые из них:

установить фиксированный размер ImageView, то scaleto FITXY. я надеюсь, что эта проблема будет решена с этим.

Imageview — Android размер изображения -1

> Первоначально размеры ImageView составляют 250dp * 250dp
> Размер изображения должен быть увеличен до 250dp
> Изображение должно сохранять пропорции
> Размеры ImageView должны соответствовать размерам масштабированного изображения после масштабирования

Например. для изображения 100 * 150 изображение и ImageView должны быть 166 * 250.
Например. для изображения 150 * 100, изображение и ImageView должны быть 250 * 166.

Если я установлю границы как

изображения правильно помещаются в ImageView, но ImageView всегда 250dp * 250dp.

После уточнений:
Это не может быть сделано только в XML. Невозможно масштабировать как изображение, так и ImageView, так что один размер изображения всегда будет 250 dp, а ImageView будет иметь те же размеры, что и изображение.

Этот код масштабируется Drawable из ImageView, чтобы оставаться в квадрате, например 250dp x 250dp, с одним измерением точно 250dp и сохраняя соотношение сторон. Затем ImageView изменяется в соответствии с размерами масштабированного изображения. Код используется в деятельности. Я проверил это через обработчик нажатия кнопки.

XML-код для ImageView:

ОБНОВЛЕНИЕ 7 ноября 2012 г .:
Добавлена ​​проверка нулевого указателя, как предлагается в комментариях

Попытка получить размер отображения изображения в ImageView

Я пытаюсь получить реальный размер изображения, отображаемого в виде изображения. На самом деле мое изображение больше, чем экран, и просмотр изображения изменяет размер изображения, чтобы отобразить его. Я ищу этот новый размер.

Я пытался переопределить метод onDraw ImageView в пользовательском представлении, но я не получаю правильную высоту и ширину.

У тебя есть какие-нибудь подсказки?

13 ответов

Ни один из ответов здесь на самом деле не отвечает на вопрос:

Из Bitmap любого размера, отображаемого ImageView найти фактические размеры отображаемого изображения в отличие от размеров поставляемого Bitmap ,

  • С помощью ImageView.getDrawable().getInstrinsicWidth() а также getIntrinsicHeight() оба вернут исходные размеры.
  • Получение Drawable через ImageView.getDrawable() и приведение его к BitmapDrawable затем с помощью BitmapDrawable.getBitmap().getWidth() а также getHeight() также возвращает исходное изображение и его размеры.

Единственный способ получить фактические размеры отображаемого изображения — извлечь и использовать преобразование. Matrix используется для отображения изображения, как оно показано. Это должно быть сделано после стадии измерения, и пример показывает, что Override из onMeasure() для обычая ImageView :

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих