Как работать в Android Studio с изображениями: пошаговая инструкция
Android Studio — это специализированная среда разработки для приложений на Андроид. Компания Гугл считает эту IDE официальным инструментом разработчика Андроид-приложений. Большинство начинающих разработчиков приложений начинают именно с этой IDE. Поэтому часто при работе с ней возникают простые вопросы типа: «Как добавить картинку в Android Studio?». Сегодня мы этот вопрос и разберем.
Графическое изображение — это важный элемент любой разработки, где предусмотрен пользовательский интерфейс. Разработка приложений для Андроид — не исключение, потому что любому разработчику хочется придать своему «детищу» индивидуальный вид или стиль.
Вообще, ОС Андроид поддерживает графические изображения следующих форматов:
- .png — это наиболее предпочтительный и распространенный формат изображений для этой ОС;
- .jpg — менее предпочтительный, но также используется при разработке;
- .gif — нежелательно использовать это расширение файлов, потому что оно создает дополнительные проблемы, однако встретить его в Андроид-приложениях также возможно.
Как добавить картинку в Android Studio
Сегодня не будем разбирать вс ю процедуру, как начать работу в Android Studio. Предполагаем, что вы уже запустили разработку своего проекта и столкнулись с очередным вопросом : как вставить картинку в Android Studio ?
При старте собственного проекта по умолчанию для графических документов создается отдельная папка, которая находится по пути:
Иногда там уже можно встретить какие-то изображения, в основном это стандартные иконки для демонстрации. При добавлении дополнительных изображений в указанную папку для них Андроидом создается отдельный ресурс drawable. И когда нам нужно будет обратиться к указанному файлу-ресурсу, это будет выглядеть так:
- непосредственно в скрипте Java: R.drawable.Имя_Вашего_Файла
- xml-кодировании : @[Имя_Созданного_Пакета:]drawable/Имя_Вашего_Файла
Допустим , вы решили добавить собственное изображение в указанн ую папку-хранилище: app/res/drawable . Все , что вам нужно для этого , — это скопировать нужный файл с hard-диска вашего компьютера, желательно файл с расширением .png или в крайнем случае с .jpg , и вставить его в указанную папку. При копировании можно использовать простую операцию «Копировать — Вставить» или комбинацию клавиш «Ctrl+C — Ctrl+V», тут не принципиально.
В некоторых версиях Android Studio вам предложат 2 папки , куда можно добавить ваше изображение: drawable или drawable-v24. Выбираем первую папку «drawable» и вставляем свое изображение туда. Также при копировании будет возможность переименовать свое изображение : если вдруг вы до этого не успели задать файлу нужное имя, то можете сделать это в моменте копирования или оставить все как есть. Выбирая игровые автоматы, доступные в Украине на платформах надежных интернет казино, можно найти замечательные слоты с высоким уровнем отдачи призовых. Разнообразные аппараты помогают отвлечься от повседневных забот, погружая игроков в увлекательный мир драйвовых эмоций и великолепных выигрышей, обеспечивая массу восхитительных ощущений.
Хочется обратить ваше внимание на то, что , когда вы хотите добавить картинку в Android Studio по указанному выше методу, она добавляется непосредственно в ваше приложение. Поэтому перед добавлением картинок нужно позаботиться о б их оптимизации. То есть необходимо добавлять картинки нужных размеров и желательно «сжимать» их при помощи сторонних сервисов. Потому что большие и тяжелые файлы будут отрицательно влиять на производительность вашего будущего приложения. Если по каким-то причинам вы не обработали изображение, то ест ь возможность оптимизировать их прямо во время разработки проекта, используя утилиту «aapt».
Как вывести картинку в Andro i d Studio
Как добавить картинку в Android Studio — мы выяснили. Это сделать совсем не сложно. Однако мы добавляем картинки для того, чтобы их пото м где-то вывести. За вывод картинок в интерфейс вашего Андроид-приложения отвечает компонент ImageView. Это базовый элемент, который занимается только графикой в вашем приложении.
Мы разобрали , как вставить картинку непосредственно в корень Android Studio, однако сами картинки можно добавлять и из других источников, например , из галереи вашего ПК или из интернет-ресурсов. Понятно, что эти методы не всегда себя оправдывают, так как в таких случаях всегда будет вероятность того, что картинка будет удалена в своем источнике, а значит, есть вероятность , что ваше приложение будет «поломано». Но эти методы добавления картинок все равно есть.
Итак, в ImageView можно:
- представить картинку по ID ресурса при помощи оператора setImageResource(int);
- представить растровую картинку с помощью setImageBitmap(Bitmap);
- представить картинку .png или .jpg, используя оператор setImageDrawable(Drawable);
- загрузить картинку по URI при помощи оператора setImageURI(Uri).
Добавить картинку в Android Studio просто, как и добавить свое фото в со цс еть. Сложнее вывести изображение в нужном месте вашего приложения, тем более если хотите добавить к нему какие-то эффекты. Но в любом случае не забывайте перед использованием сторонних изображений проводить им должную оптимизацию, чтобы не создать такое приложение, которое не сможет запуститься на современном смартфоне из — за своей «тяжести» и прожорливости.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Источник
Работа с изображениями
Ресурсы изображений
Одним из наиболее распространенных источников ресурсов являются файлы изображений. Android поддерживает следующие форматы файлов: .png (предпочтителен), .jpg (приемлем), .gif (нежелателен). Для графических файлов в проекте уже по умолчанию создана папка res/drawable . По умолчанию она уже содержит ряд файлов — пару файлов иконок:
При добавлении графических файлов в эту папку для каждого из них Android создает ресурс Drawable . После этого мы можем обратиться к ресурсу следующим образом в коде Java:
Например, добавим в проект в папку res/drawable какой-нибудь файл изображения. Для этого скопируем на жестком диске какой-нибудь файл с расширением png или jpg и вставим его в папку res/drawable (для копирования в проект используется простой Copy-Paste)
Далее нам будет предложено выбрать папку — drawable или drawable-24 . Для добавления обычных файлов изображений выберем drawable :
Здесь сразу стоит учесть, что файл изображения будет добавляться в приложение, тем самым увеличивая его размер. Кроме того, большие изображения отрицательно влияют на производительность. Поэтому лучше использовать небольшие и оптимизрованные (сжатые) графические файлы. Хотя, также стоит отметить, что все файлы изображений, которые добавляются в эту папку, могут автоматически оптимизироваться с помощью утилиты aapt во время построения проекта. Это позволяет уменьшить размер файла без потери качества.
При копировании файла нам будет предложено установить для него новое имя.
Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется dubi2.png . И затем нажмем на кнопку Refactor. И после этого в папку drawable будет добавлен выбранный нами файл изображения.
Для работы с изображениями в Android можно использовать различные элементы, но непосредственно для вывода изображений предназначен ImageView . Поэтому изменим файл activity_main.xml следующим образом:
В данном случае для отображения файла в ImageView у элемента устанавливается атрибут android:src . В его значении указывается имя графического ресурса, которое совпадает с именем файла без расширения. И после этого уже в Preview или в режиме дизайнере в Android Studio можно будет увидеть применение изображения, либо при запуске приложения:
Если бы мы создавали ImageView в коде java и из кода применяли бы ресурс, то activity могла бы выглядеть так:
В данном случае ресурс drawable напрямую передается в метод imageView.setImageResource() , и таким образом устанавливается изображение. В результате мы получим тот же результат.
Однако может возникнуть необходимость как-то обработать ресурс перед использованием или использовать его в других сценариях. В этом случае мы можем сначала получить его как объект Drawable и затем использовать для наших задач:
Для получения ресурса применяется метод ResourcesCompat.getDrawable() , в который передается объект Resources, идентификатор ресурса и тема. В данном случае тема нам не важна, поэтому для нее передаем значение null. Возвращается ресурс в виде объекта Drawable :
Затем, например, можно также передать ресурс объекту ImageView через его метод setImageDrawable()
Источник
Полный список
— изучаем drawable теги: , ,
Продолжаем разбирать типы Drawable, которые можно описывать с помощью XML-разметки. Проектов в этом уроке создавать не будем. Я просто буду в своем проекте создавать XML-файлы в папке drawable и ставить их фоном для View. А в тексте урока приведу код и скрины. Иногда буду вешать дополнительно серый фон, чтобы был виден реальный размер View.
Чтобы программно добраться до Drawable, который вы для View повесили как фон, надо просто вызвать метод getBackground.
Bitmap
Тег позволяет получить Drawable обертку для Bitmap. У тега есть несколько атрибутов.
В атрибуте src указываем нужный нам файл-изображение.
Атрибут gravity указывает, как bitmap будет располагаться внутри Drawable. Можно использовать несколько значений, разделенных знаком | . Значения тут стандартные, и некоторые из них мы часто используем при работе с layout. Рассмотрим пример.
Значение атрибута gravity сдвигает изображение влево-вверх
Далее ставим следующие значение атрибута gravity:
fill_horizontal — растянуть по горизонтали
fill — растянуть (используется по умолчанию)
Насколько я понял, значения clip_vertical и clip_horizontal идентичны значениям fill_vertical и fill_horizontal в случае когда Bitmap по размеру больше, чем предоставляемое ему пространство. Т.е. clip_vertical сожмет его по вертикали, так чтобы он влез. А clip_horizontal — по горизонтали.
Атрибут tileMode — это режим «плитки». Позволяет замостить вашим изображением все доступное пространство. По умолчанию он имеет значение disabled.
Для примера я создам такой bitmap.
Четыре разных цвета, внутренние границы — сплошные, внешние — пунктиром.
Если tileMode = repeat, то Bitmap будет размножен и займет все доступное пространство
Далее меняем значение атрибута tileMode.
mirror – Bitmap также будет размножен, но при этом он будет чередоваться со своим отражением
clamp – растягивает края картинки на все свободное пространство
Прочие атрибуты тега :
antialias – сглаживание линий
dither – преобразование цветов, если текущей палитры недостаточно для отображения
filter – фильтр при сжатии или растягивании (пример результата использования есть в Уроке 158)
mipMap – использование mip-текстурирования. Про него можно почитать в википедии. Используйте этот режим, если планируете в процессе отображения уменьшать bitmap более чем в два раза.
Мы рассмотрели XML-описание, но вы всегда можете создать этот объект и программно. Java-реализация – класс BitmapDrawable.
Layer List
Мы можем описать Drawable, который будет состоять из нескольких Drawable-слоев. Для этого используется тег , а внутри него теги .
У нас 4 слоя. Три bitmap со стандартной иконкой и одна фигура. Атрибуты left, top, right, bottom позволяют указывать отступы. А в атрибуте id можно указать id этого Drawable-слоя.
Обратите внимание, что важен порядок тегов item. Каждый последующий слой рисуется поверх предыдущего. Например, на получившемся изображении видно, что прямоугольник проходит «над» верхней иконкой, но «под» нижней.
Мы можем в коде получать доступ к отдельным Drawable внутри LayerDrawable. Для этого сначала получаем LayerDrawable.
А затем вызываем метод findDrawableByLayerId(int id) и указываем id, который вы указывали в атрибуте id тега item. На выходе получим Drawable.
Также у LayerDrawable есть еще несколько интересных методов
getDrawable(int index) — возвращает Drawable по индексу, а не по id
getId(int index) — возвращает id по индексу
getNumberOfLayers() — возвращает кол-во Drawable-слоев
State List
Тег позволяет отображать Drawable в зависимости от состояния View. Возможные состояние View можно посмотреть в хелпе. Рассмотрим пример с двумя из них: checked и pressed. На экране будет ToogleButton. Эта кнопка переходит в состояние checked и обратно, если на нее нажимать. А во время нажатия, пока палец касается экрана, кнопка находится в состоянии pressed.
State List позволит нам использовать три разных Drawable для отображения кнопки в трех состояниях: обычное, checked, pressed. Для этого создадим три файла в папке drawable.
Прямоугольник темно-серого цвета. Этот Drawable будем отображать в обычном состоянии кнопки.
Прямоугольник темно-синего цвета. Этот Drawable будем отображать в нажатом состоянии кнопки.
Прямоугольник светло-синего цвета. Этот Drawable будем отображать когда кнопка находится в состоянии checked.
И еще один файл, button_selector.xml:
Этот последний Drawable является селектором. В нем мы используем теги item, в которых указываем для какого состояния какой Drawable использовать
В первом item мы указали state_pressed=true, а значит этот item будет выбран системой когда кнопка будет в состоянии pressed. И экране мы увидим Drawable из этого item, т.е. toogle_button_pressed.
В втором item мы указали state_checked=true, а значит этот item будет выбран системой когда кнопка будет в состоянии checked. И экране мы увидим toogle_button_checked.
В третьем item мы не указали никакого состояния, этот item будет выбран при обычном состоянии кнопки. И экране мы увидим toogle_button.
Учтите, что здесь важен порядок расположения item внутри selector. Т.е. система идет по ним по порядку и выбирает первый подходящий. Если вы третий item, который без явного указания состояния, поставите первым, то система всегда будет останавливаться на нем.
Состояния можно комбинировать, т.е. в одном item вы можете указать несколько разных состояний.
Ставим этот Drawable, как фон для ToogleButton:
В результате, сначала видим обычное состояние
Нажимаем и держим, т.е. состояние pressed
Отпускаем – включился checked
Еще раз нажмем-отпустим — выключится checked и будет снова обычное состояние. Для каждого состояния отображается свой Drawable.
У View, кстати, есть методы, которые позволяют программно управлять состоянием. Это, например: setPressed и setSelected.
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник