본문 바로가기

프로그래밍/안드로이드

[안드로이드] 이미지뷰 확대모드

속성 

설명 

matrix 

행렬을 사용하여 스케일링한다. 

디폴트 단위 행렬일 때는 좌상단에 스케일링하지 않은 채로 출력된다. 

fitXY 

가로, 세로 모두 확장하여 뷰의 크기를 다 채우며 종횡비를 유지하지 않는다. 

fitStart 

종횡비를 유지하여 스케일링하며 왼쪽, 위쪽에 놓는다. 

fitCenter 

종횡비를 유지하며 스케일링하며, 중앙에 놓는다. 

fitEnd 

종횡비를 유지하여 스케일링하며 오른쪽 , 아래쪽에 놓는다. 

center 

이미지를 중앙에 놓으며 스케일링하지 않는다. 

centerCrop 

종횡비를 유지하며 스케일링하며 뷰의 크기 이상으로 채운다. 

따라서 이미지 일부가 잘릴 수 있다. 

centerInside 

종횡비를 유지하여 스케일링하며 뷰의 크기 이하로 채운다. 

뷰가 더 작으면 이미지 축소가 발생한다. 


스케일링(Scaling) : 이미지의 표시를 위한 크기변환을 뜻한다.



스케일타입 없이, width와 height만 조정


1번째 그림:  width(100px), height(50px)의 기본이미지

2번째 그림 :  width(300px), height(100px)을 주었다. (즉, 가로 3배 세로 2배)

     이 경우 더 작은 비율쪽(height)으로 이미지를 확장하여 가득 채운다.

     비율을 맞추지 못한 쪽(width)로 여백이 생긴다.

3번째 그림 : width(50px), height(100px)을 주었다. 위에서 처럼 더 작은 비율쪽으로 

이미지를 확장한다고 했으니 width가 절반으로 줄어들어(1/2)든다.

따라서 비율을 맞추지 못한 세로(height)로 여백이 생긴다.


android:scaleType만 서로 다르게 준 상황이다.


1, 2, 3번째 :  fitStart, fitCenter, fitEnd, fitXY는 이미지를 여백에 배치한다.

4번째 그림 : fitXY는 가로, 세로 방향으로 이미지뷰의 비율과 이미지의 비율에 맞게 

     모두 확대하여 이미지를 가득 채운다.

5번째 그림 fitCenter는 이미지를 중앙에 배치하며 이 값이 디폴트이다.


1번째 그림 : center 속성은 이미지를 위젯 중앙에 배치한다.

만약 위젯이 이미지보다 더 작다면 이미지는 잘린다.


2,3번째 그림 : centerCrop은 스케일링하되 위젯 면적을 최대한 다 채우며, 비율이 맞지 않은 쪽은 잘린다. 기본 이미지가( 100, 50 )이고, centerCrop은 ( 300, 100 )일 떄, 폭을 다 채우면 높이가 150이 되지만, 위 아래를 25씩 잘라 100을 맞춘다.


4,5번째 그림 : centerInside는 이미지를 확대하지 않고 "위젯이 뷰보다 작을 때" 종횡비를 맞추어 축소한다.



1번째 그림 : matrix는 이미지의 확대 비율과 위치를 행렬로 지정한다.




adjustViewBounds : 이미지가 뷰의 최대 크기보다 더 클 때, 위젯의 크기를 최대 크기로 강제 조정할 것인지 지 지정한다.

false : 최대 크기를 무시하고 이미지의 크기대로 위젯의 크기를 조정

true : 최대 크기에 맞게 이미지뷰 위젯의 크기도 강제 조정된다.




cropToPadding : 이미지를 잘라야 할 때 여백(padding)에서 자를 것인지, 여백을 무시하고 바깥 영역까지 최대한 활용할 것인가를 지정한다.


padding값이 존재할 때만 이 속성을 사용할 수 있으며, 실제로 이미지뷰에는 패팅을 잘 쓰지 않으므로

별 실용성이 없다. (위 그림에서 padding="20dip"를 줬으니 보이지 않을 뿐 여백이 존재한다.)


false(디폴트 값) : 안쪽 여백을 넘어 최대한의 공간을 다 활용한다.

true : 여백의 중요한 의미가 있어서 이미지가 잘리는 한이 있어도 여백을 유지해야 한다면 사용.