Массив картинок android studio

ImageSwitcher

Компонент ImageSwitcher наследуется от класса ViewSwitcher и позволяет заменять текущий элемент View на другой элемент View. Самый распространённый вариант — использование ImageView. Одновременно на экране может отображаться только один элемент View. Во время перехода между элементами View могут использоваться анимации (плавные появления/исчезновения и вращения). В студии находится в разделе Expert.

Базовый пример

Дочерние элементы View создаются при помощи экземпляра класса ViewFactory. Например, элемент ImageSwitcher и его соответствующий экземпляр класса ViewFactory могут быть использованы для генерации элемента ImageView текущего вопроса викторины и для последующего переключения на элемент ImageView следующего вопроса, когда пользователь щёлкнет по кнопке Вперёд или Назад.

Создадим новый проект и добавим элементы в разметку.

Обратите внимание, что элементы ImageView являются дочерними и вложены в ImageSwitcher. Также у атрибута onClick задан обработчик onSwitcherClick. Осталось написать код:

Метод showNext() выводит следующий элемент. Вывод происходит циклически в одном направлении. Если у вас используются две картинки, то они будут по очереди сменять друг друга. Для смены изображения в обратную сторону используется метод showPrevious().

Анимация затемнения

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

Добавив код к предыдущему примеру, вы получите плавную анимацию с использованием прозрачности. Первая картинка будет плавно исчезать, уступая второму изображению.

Динамическая смена картинок

Рассмотрим более продвинутый пример. Подготовьте несколько картинок в папке res/drawable. На экран активности добавим две кнопки для просмотра картинок Вперёд и Назад. На этот раз мы уже не используем дочерние элементы ImageView. Картинки будут загружаться динамически.

Напишем код для управления галереей.

Вначале мы прописали массив графических ресурсов, а также определили переменную position для определения текущей позиции.

Далее кроме знакомых нам методов для анимации, вызываем методы setFactory() и setImageResource().

Метод setFactory() помогает указать подходящий класс ViewFactory, позволяющий менять изображения по очереди. Класс ViewFactory имеет всего один обязательный метод — метод makeView(). Этот метод должен возвращать View подходящего типа, в нашем примере определённым образом настроенный элемент ImageView.

Метод setImageResource() загружает изображение из ресурсов.

Вспомогательные методы setPositionNext() и setPositionPrev() позволяют установить значение для текущей позиции, которое используется в обработчиках нажатий кнопок.

Управление жестами

Если вы хотите управлять сменой картинок не через кнопки Вперёд/Назад, а движением пальца, то нужно подключить класс GestureDetector. Дополним предыдущий пример.

Слайд-шоу

По такому же принципу можно устроить анимацию в виде слайд-шоу.

Код. Не забудьте подготовить несколько картинок в ресурсах.

Источник

Как сохранить в массиве несколько файлов .jpg и .png? Android Studio

Итак, вот полное объяснение. В настоящее время я создаю приложение для Android, в котором одновременно может быть от 3 до 5 изображений. Затем, после нажатия кнопки изображения (например, «Вперед» или «Далее»), появится еще один набор из 3–5 изображений. Набор изображений будет следующим: во-первых, изображение в формате .jpg на заднем плане; во-вторых, посередине меньшее изображение в формате .png; в-третьих, еще меньшее изображение .png впереди; вместе с кнопкой изображения. И так далее.

Я использую Android Studio. Я знаю, что я должен соединить массив в файле .java с ImageView в файле .xml, используя объект. Но я все еще не могу представить код в своей голове.

Читайте также:  Viber для планшета андроид установить

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

3 ответа

Храните изображения в папке res/drawable . Предположим, имя изображений будет a.jpg a1.png a2.png . Теперь в вашем Java-коде вы можете создать целочисленный массив, например

Теперь вы можете использовать эти значения в соответствии с вашими требованиями.

Сначала создайте список всех ресурсов изображений:

В любом месте кода просто обращайтесь к случайному или конкретному изображению следующим образом:

Сохраните имена изображений, которые находятся в папке res / drawable, в массив строк и установите ImageView src по именам, присутствующим в этом массиве.

Источник

Хранение изображений и доступ к ним Android

Здравствуйте, такая проблема в приложении использую много image храню их в массивах типа int[] = . И вроде все нормально работает, только при запуске activity эти массивы инициализируются и в результате сразу жрет много памяти. Может быть есть другие способы хранения и доступа к изображениям, более щадящие для памяти, что ли?

2 ответа 2

Если до 1 метра, то можно в assets и обращаться к ним примерно так file:///android_asset/my_file.png
Только придется как с файлом работать, то есть считать потоком и дальше выводить

Создаете в res/values/strings массив с именами картинок без расширений comedy europa hit maximum newradio nrj radiotnt record russkyirock silverrain а потом в коде вытаскиваете по этим именами id и устанавливаете в ваши image view. Например в папке drawable лежит файл comedy.png, то для него String name =getResources().getStringArray(R.array.arrayWithStrings)[0]; imageView.setImageResource(getResources(). getIdentifier(name, «drawable», getPackageName()));

Всё ещё ищете ответ? Посмотрите другие вопросы с метками android массивы изображения или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.12.3.40888

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Android. Вывод изображений, различные способы

Эта статья будет полезна начинающим разработчикам, здесь я предложу несколько вариантов вывода изображений на Android. Будут описаны следующие способы:

Обычный метод – стандартный способ, используя ImageView. Рассмотрены варианты загрузки картинки из ресурса, а также из файла на SD карте устройства.

Продвинутый вариант — вывод изображения, используя WebView. Добавляется поддержка масштабирования и прокрутки картинки при помощи жестов.

“Джедайский” способ – улучшенный предыдущий вариант. Добавлен полноэкранный просмотр с автоматическим масштабированием изображения при показе и поддержкой смены ориентации устройства.

Исходники тестового проекта на GitHub github.com/Voldemar123/andriod-image-habrahabr-example

В этой статье я не рассматриваю вопросы загрузки изображений из Интернета, кеширования, работы с файлами и необходимых для работы приложения permissions – только вывод картинок.

Итак, задача — предположим, в нашем приложении необходимо вывести изображение на экран.
Картинка может размерами превышать разрешение экрана и иметь различное соотношение сторон.
Хранится она либо в ресурсах приложения, либо на External Storage — SD карте.

Также допустим, мы уже записали на карту памяти несколько изображений (в тестовом проекте – загружаем из сети). Храним их в каталоге данных нашего приложения, в кеше.

public static final String APP_PREFS_NAME = Constants.class.getPackage().getName();
public static final String APP_CACHE_PATH =
Environment.getExternalStorageDirectory().getAbsolutePath() +
«/Android/data/» + APP_PREFS_NAME + «/cache/»;

Layout, где выводится картинка

android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:orientation=»vertical» >

Масштабирование по умолчанию, по меньшей стoроне экрана.
В Activity, где загружаем содержимое картинки

Читайте также:  Почему android studio лучше

private ImageView mImageView;
mImageView = (ImageView) findViewById(R.id.imageView1);

Из ресурсов приложения (файл из res/drawable/img3.jpg)

Задавая Bitmap изображения

FileInputStream fis = new FileInputStream(Constants.APP_CACHE_PATH + this.image);
BufferedInputStream bis = new BufferedInputStream(fis);

Bitmap img = BitmapFactory.decodeStream(bis);

Или передать URI на изображение (может хранится на карте или быть загружено из сети)

mImageView.setImageURI( imageUtil.getImageURI() );
Uri.fromFile( new File( Constants.APP_CACHE_PATH + this.image ) );

Этот способ стандартный, описан во множестве примеров и поэтому нам не особо интересен. Переходим к следующему варианту.

Предположим, мы хотим показать большое изображение (например фотографию), которое размерами превышает разрешение нашего устройства. Необходимо добавить прокрутку и масштабирование картинки на экране.

android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:orientation=»vertical» >

В Activity, где загружаем содержимое

protected WebView webView;
webView = (WebView) findViewById(R.id.webView1);

установка черного цвета фона для комфортной работы (по умолчанию – белый)

включаем поддержку масштабирования

больше места для нашей картинки

webView.setPadding(0, 0, 0, 0);

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

загружаем изображение как ссылку на файл хранящийся на карте памяти

webView.loadUrl(imageUtil.getImageFileLink() );
«file:///» + Constants.APP_CACHE_PATH + this.image;

Теперь мы хотим сделать так, чтобы картинка при показе автоматически масштабировалась по одной из сторон, при этом прокрутка остается только в одном направлении.
Например, для просмотра фотографий более удобна ландшафтная ориентация устройства.
Также при смене ориентации телефона масштаб изображения должен автоматически меняться.
Дополнительно расширим место для просмотра изображения на полный экран.

В AndroidManifest.xml для нашей Activity добавляем

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

@Override
public void onConfigurationChanged(Configuration newConfig) <
super.onConfigurationChanged(newConfig);
changeContent();
>

В приватном методе описана логика пересчета масштаба для картинки
Получаем информацию о размерах дисплея. Из-за того, что мы изменили тему Activity, теперь WebView раскрыт на полный экран, никакие другие элементы интерфейса не видны. Видимый размер дисплея равен разрешению экрана нашего Android устройства.

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

int width = display.getWidth();
int height = display.getHeight();

Размеры изображения, выбранного для показа

Bitmap img = imageUtil.getImageBitmap();

int picWidth = img.getWidth();
int picHeight = img.getHeight();

Меняем масштаб изображения если его высота больше высоты экрана. Прокрутка теперь будет только по горизонтали.

if (picHeight > height)
val = new Double(height) / new Double(picHeight);

Подбрасываем в WebView специально сформированный HTML файл, содержащий изображение.

webView.loadDataWithBaseURL(«/»,
imageUtil.getImageHtml(picWidth, picHeight),
«text/html»,
«UTF-8»,
null);

StringBuffer html = new StringBuffer();

Такой способ я применил из-того, что после загрузки изображения в WebView через метод loadUrl, как в прошлом варианте, setInitialScale после поворота устройства не изменяет масштаб картинки. Другими словами, показали картинку, повернули телефон, масштаб остался старый. Очень похоже на то, что изображение как-то кешируется.

Я не нашел в документации упоминания об этом странном поведении. Может быть местные специалисты скажут, что я делаю не так?

Источник

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.

Источник

Оцените статью