Тема 7.4. Работа с графикой и изображениями
Пример использования виджета ImageView в Android
ImageView является одним из виджетов пользовательского интерфейса, который используется для просмотра изображений. Чтобы использовать его в своем приложении, мы должны добавить одиночный тег <ImageView ... /> в XML макет:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@drawable/fbcom" />
</LinearLayout>
Как видно из макета, мы использовали LinearLayout в качестве корневого элемента компоновки (вы можете брать любой другой тип).
Обратите внимание на атрибут android:src="@drawable/fbcom". Здесь мы указываем, что виджет ImageView должен отображать картинку, которая находится в папке res/drawable под именем fbcom (расширение файла здесь не указывается). Также с помощью атрибута android:layout_gravity мы указали, что виджет должен быть отцентрирован по горизонтали.
Вставьте любое небольшое изображение в папку res/drawable вашего проекта и замените значение атрибута src на @drawable/названиеВашегоИзображения.
Вот как это выглядит у меня в Android:
Также изображение может задаваться и в коде программы:
Например, на примере ниже мы устанавливаем изображение в ImageView не в макете, а коде программы:
// инициализируем виджет
ImageView imageView = (ImageView) findViewById(R.id.imageView);
// устанавливаем изображение из папки res/drawable/ в виджет
imageView.setImageResource(R.drawable.fbcom);
ScaleType виджета ImageView в Android
Виджет ImageView предлагает различные варианты конфигурации для поддержки различных scaleTypes (способов масштабирования). Опция ScaleType используются для масштабирования изображения в пределах View. Давайте рассмотри наиболее полезные варианты scaleType:
-
CENTER отображает изображение по центру View без какого-либо масштабирования.
-
CENTER_CROP центрирует и масштабирует изображения из сохранением соотношения сторон
-
CENTER_INSIDE — масштабирование изображения внутри View из сохранением соотношения сторон. Если изначально изображение меньше, чем View, то свойство делает то же самое, что и CENTER.
-
FIT_CENTER — масштабирование изображения внутри View из сохранением соотношения сторон. По крайней мере одна ось будет точно совпадать с View, а изображение будет выравнено по центру View.
-
FIT_START — то же, что и FIT_CENTER, но выравнивается по левому верхнему углу View.
-
FIT_END — то же, что и FIT_CENTER, но выравнивается по правому нижнему углу View.
-
FIT_XY — так масштабирует размеры изображения, чтобы оно соответствовать размеру View не сохраняя пропорции.
-
MATRIX — масштабирование изображения с помощью дополнительного класса Matrix. Матрица может быть поставлена с помощью метода setImageMatrix. Класс Matrix может быть использован, например, для вращения изображений.
-
Работа с растровыми изображениями (Bitmaps)
Работа с растровыми изображениями относится к классу android.graphics.Bitmap.
Чаще всего для масштабирования изображений с Drawable используется BitmapFactory. Если не использовать BitmapFactory, то это приводит к неэффективной работе с памятью.
ImageView imageView = (ImageView) findViewById(R.id.imageView);
// загружаем изображение из sd-карты в объект Bitmap
Bitmap bitMap = BitmapFactory.decodeFile("/sdcard/testImage.png");
// и устанавливаем его в виджет ImageView
imageView.setImageBitmap(bitMap);