이게 뭐라고 이렇게 헷갈릴까
이상한 질문이라고 생각하는 사람도 있겠지만 이런 질문을 생각보다 많이 받는데,
결과부터 이야기하면. xhdpi에서40dp면 xxhdpi에서도 40dp이다.
디자이너들에게 xhdpi라고 하면720*1280(px)화면을 떠올리고 xxhdpi화면은 1080*1920(px)의화면을 떠올리는 경우가 많을 것 이다.
“Xhdpi는 나누기2고 xxhdpi는 나누기3이고 dp단위…뭐가 뭔지 너무나 헷갈려요”
디자인 시안 작업하는 픽셀단위 사이즈를 중심에 두고 dp로 변환하려고생각 하려 하면 구조가약간 꼬여버릴 수 있다.
dp작업 기준으로 생각한 뒤 각각 모바일 화면에 어떻게 노출될 것인지로 생각하면 이해가 조금 더 쉬울 것이라 생각한다.
아래 그림과 같이 안드로이드 스튜디오에서 가로를 가득 채우고 세로가 40dp인사각형의 레이아웃을(개발자가) 작업 하였을 경우 각 기기에서는오른쪽과 같이 노출된다
dp단위로 개발이 되면,레이아웃 속성에 따라 기기와상관없이 가로는 모두 꽉 채워지며 세로 인 40dp는 xhdpi 기기에서는계산에 따라 X2를 한 80px로 노출되며 xxhdpi기기에서는 X3을한120px로 노출이 된다.
반대로 생각해보자. 내가 디자인 작업을 한 화면의 요소들의 크기나 간격을 dp로 계산할 경우에는 아래와 같이. 1080*1920 사이즈 작업물 에서는 나누기3을 해야 dp단위가 나오고, 720*1280사이즈로 디자인 작업을 할 경우 나누기 2를 해야 dp사이즈가 나오게 된다.
개발한 레이아웃 기준으로 기기마다 위 계산으로 뿌려지게 되는 환경이다.
720*1280화면에서는 나누기2로 dp값이들어가므로 2의 배수로 해야 정수로 딱 떨어지고,(의도한픽셀값이 정확하게 노출) 1080*1920화면을 타겟 해상도로 작업을 할 때에는 3의배수로 작업을 해야 정수로 떨어지면서 예상 가능한 사이즈로 노출이 된다.
그래서 고해상도를 대응해야겠다. 라고 생각했을 때 dp단위로 가이드가 전달 되는 업무 분위기라면, 개발자들은 사실 큰이슈는 없다. 이미지만 고해상도가 제공이 된다고 하면 개발자들은 그냥 평소처럼 가이드를 보며 화면을짜면 되기 때문에, (굳이 있다고 하면 이미지 용량문제 정도?)
그럼 더 나아가서 xhdpi(720*1280)으로 화면을 디자인 후 , xxhdpi 고해상도 리소스를 대응하려면 어떻게 해야 할까.
xhdpi에서 1.5를곱하면 xxhdpi 가 된다고(단순하게)생각하자.
리소스를 제작 후 1.5를곱한 비율로 리소스를 제작하여 전달하면 된다.(xhdpi화면 내에20x20픽셀의 아이콘을 제작하였다면, xxhdpi용 고해상도 사이즈는 [곱하기 1.5가 적용된]30x30픽셀의 아이콘이 될 것이다.)
그래서 가능한 짝수로 디자인이 되면 리사이징 작업 시 소수점으로 떨어지지 않고 정수로 사이즈가 계산이 되어 좋다.
일반적으로 xhdpi기준으로 화면을 제작하고(720x1280) 고해상도용 이미지 리소스만 추가로 대응하는데, dp계산시에도 짝수로 작업해야 정수로 떨어지고, xxhdpi용 리소스 리사이징 작업 시 에도 짝수로 작업이되어야 정수로 떨어지기 때문에 짝수 작업을 권장한다.
만약 px로 가이드를 전달하고 있다고 하면 개발자들이 dp변환을 위하여 반으로 나눌 때 .5처리를 하던지 반올림을 하던지작업자에 따라 알아서(?)처리하는 경우가 대부분이므로 이 정도를 쿨 하게 넘어 갈 수 있다면 괜찮지만, 그렇지 않다면 짝수로 작업하자.
픽셀을 dp로 변환하는 법을 검색해 본 사람이라면 한번쯤은 지나치면서보았을 공식이 있을 것이다.
dp = px * (160/density)
처음엔 이 공식을 보고 전혀 이해를 하지 못했었는데 나중에 시간이 흐르니 이해가 되어 잊기전에 아래와 같이 정리해보았다.
마지막 부분을 보면 눈치챘을 지 모르지만, 글의 앞 내용과 정확하게같은 내용이다.
앞의 내용은 위 그림의 정답만을 이용하여 이해하기 쉽게 풀어본 내용이다.