В прошлой теме было рассмотрено, как выводить изображения с помощью элемента ImageView. Теперь рассмотрим некоторые дополнительные моменты по работе с этим элементом.
Некоторые основные атрибуты элемента ImageView:
android:cropToPadding: при значении true
изображение обрезается в соответствии с установленными отступами
android:scaleType: устанавливает, как изображение будет масштабироваться относительно границ элемента ImageView
Чтобы задать параметры масштабирования, используется одно из значений перечисления :
CENTER
: изображение центрируется по центру без масштабирования
CENTER_CROP
: изображение центрируется по центру и масштабируется с сохранением аспектного отношения между шириной и высотой. Если какая-то
часть не помещается в пределы экрана, то она обрезается
CENTER_INSIDE
: изображение центрируется по центру и масштабируется с сохранением аспектного отношения между шириной и высотой,
но ширина и высота не могут быть больше ширины и высоты ImageView
FIT_CENTER
: изображение масштабируется и центрируется
FIT_START
: изображение масштабируется и устанавливается в начало элемента (вверх при портретной ориентации и влево - при альбомной)
FIT_END
: изображение масштабируется и устанавливается в конец элемента (вниз при портретной ориентации и вправо - при альбомной)
FIT_XY
: изображение масштабируется без сохранения аспектного отношения межуд шириной и высотой, заполняя все пространство ImageView
MATRIX
: изображение масштабируется с применением матрицы изображения
android:src: ресурс изображения
android:alpha: устанавливает прозрачность (значение от 0.0 - полностью прозрачное до 1.0 - полностью видимо)
android:tint: цвет, который используется для наложения на изображение
android:tintMode: режим, который применяется для наложения цвета на изображения
Некоторые основные методы класса ImageView:
Drawable getDrawable(): возвращает ресурс Drawable
, который связан с данным ImageView (или null
,
если ресурс для ImageView не устанавлен)
ImageView.ScaleType getScaleType(): возвращает значение перечисления ImageView.ScaleType, которое указывает, как масштабируется изображение относительно границ элемента ImageView
void setImageDrawable(Drawable drawable): устанавливает ресурс изображения с помощью объекта Drawable
void setImageResource(int resId): устанавливает ресурс изображения с помощью идентификатора ресурса Drawable
void setImageURI(Uri uri): устанавливает ресурс изображения с помощью адреса Uri этого ресурса
void setScaleType(ImageView.ScaleType scaleType): задает масштабирование изображения
void setImageAlpha(int alpha): задает прозрачность изображения - значение от 0.0 до 1.0
Например, установка значения FIT_XY
для атрибута android:scaleType в файле activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/dubi2" android:scaleType="fitXY" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
В итоге изображение растянется по вертикали и горизонтали:
Для сравнения аналогичный пример с android:scaleType="center"
:
Аналогичный пример в коде java:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = new ConstraintLayout(this); ImageView imageView = new ImageView(this); imageView.setImageResource(R.drawable.dubi2); // задаем масштабирование imageView.setScaleType(ImageView.ScaleType.FIT_XY); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT , ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; imageView.setLayoutParams(layoutParams); constraintLayout.addView(imageView); setContentView(constraintLayout); } }