본문 바로가기

프로그래밍/안드로이드

[안드로이드 팀] px와 dip의 관계


dip을 사용하여 개발 할 경우,
해상도에 따른 이미지의 확대/축소 비율을 유지할 수 있다.

우선 알고 있어야 하는 것은,

QVGA (240x320, low density, small screen)
WQVGA (240X400, low density, normal screen)
FWQVGA (240x432, low density, normal screen)
HVGA (320x480, medium density, normal screen)
WVGA800 (480x800, high density, normal screen)
WVGA854 (480x854, high density, normal screen)

그리고,
HVGA (320x480) = 160 dip(dp)
WVGA800 (480x800) = 240 dip(dp)

안드로이드 개발에 있어서 기준이 되는 것은 HVGA라고 보면 쉬운데,
160dp의 경우, 1dp = 1px이기 때문이다.
고해상도 단말기는 대부분 WVGA800인데 이는 240dp이고, 1dp = 1.5px이다.

dip를 사용하면 해상도에 따른 이미지 확대/축소의 비율을 유지할 수 있다고 하였다.

예를 들어, 20dp x 20dp의 이미지는,
HVGA에서 20px x 20px로 보이고, WVGA에서는 30px x 30px로 보인다는 것이다.

pix → dip 변환 : dips = pixels * (160 / density)
dip → pix 변환 : pixels = dips * (density / 160)

그런데 sp나 dp는 xml에서만 의미가 있지, 코드상에서는 오직 px만 유효하다.
따라서 코드상에서도 가급적 단위를 변환해줘야 한다.

px = (dp * getContext().getResources().getDisplayMetrics().density + 0.5f);

*sp : Scale Independent Pixel로 dp와 비슷하지만 화면 해상도 뿐만 아니라
        사용자 설정 폰트 크기도 조절한다. 따라서 폰트에서 사용하는 것이다.