안드로이드 스튜디오를 사용 중입니다.
액티비티에서 Canvas를 이용해서 drawCircle 하고
drawBitmap 등등 여러가지를 그려내고 있는데요.
핸드폰의 종류가 다양한 만큼 화면 해상도의 차이도
천차만별이잖아요? 그 해상도에 알맞게 대처할 수 있는
방법을 알고 싶습니다.
게임을 만들고 있는데, 그 게임의 등장인물들의
사이즈, 이동속도, 공격속도 같은 여러가지 요소가
핸드폰마다 너무 심한 차이를 보이는 것을 방지하려고 하는데요.
제 핸드폰에서는 캐릭터의 사이즈를 150으로 해놓았는데
다른 핸드폰의 150은 제 핸드폰의 150과 다르잖아요?
이것을 해결하기 위해 이런저런 방법을 찾고있는 중입니다.
(처음에는 그냥 화면 가로나 혹은 세로의 길이를 기준으로
잡았는데, 이 방법을 쓰면 안되는 개인적인 사정이 있습니다.)
제가 알아낸 방법이 하나 있긴 한데, 이 방법의 사용법이
잘못 된건지 ... 생각대로 잘 안됩니다.
Resources resources = this.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
screenWidth = metrics.widthPixels / (metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
screenHeight = metrics.heightPixels / (metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
(screenWidth는 화면 가로, screenHeight는 화면 세로)
Pixel 단위를 Dp 단위로 바꾸는 것이 해답이라고 하여
위와 같이 시도를 해보았는데, 위 방법이 잘못 된 건가요?
위 공식을 화면 가로 세로에만 적용하는 게 아니라
Canvas로 그려지는 모든 그림들에게 적용시켜야 하나요?
아니면 위 방법 말고 다른 방법이 또 있는지 궁금합니다.
그리고 액티비티 뿐만이 아니라, 레이아웃에서도
해상도 문제로 고민이네요. AndroidManifest.xml 파일에
아래와 같은 코드를 추가만 하면 해결 되는 건가요?
아니면 액티비티 상에서도 추가해야 할 코드가 있나요?
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
(지금 현재 RelativeLayout을 사용하고 있고, 단위는 dp를
쓰고 있으며, 뷰의 배치는 match_parent를 활용하기도 하고,
뷰나 부모의 위치를 중심으로 배치시키기도 합니다. 예를 들어
A 버튼한테서 왼쪽으로 30dp 떨어진 위치에 B 텍스트를
배치한다는 방식으로요. 문제 없을까요?)
질문이 길어서 죄송합니다. ㅠㅠ
(방법 자체도 문제지만, 그 방법의 사용법도
여기저기 다 찾아봤지만 제대로 설명해주는 곳이
딱히 없네요... 공식 하나만 딸랑 적혀있는 곳이 수두룩하고
그 공식을 어디에 어떻게 써야하는지는 안나와있고 ㅜㅜ)
.