В прошлой теме было рассмотрено, как выводить изображения с помощью элемента 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);
}
}