안드로이드 개발 질문/답변
(글 수 45,052)
유사한 파일명을 가진 리소스에 대해서 동일한 작업을 반복하려 합니다.
image_001.png 부터
image_100.png 까지 있다고 할 때,
R.drawable.image_001
이 부분을
R.drawable.image_%3d
와 같은 형태로 접근할 수 없을까요?
2010.09.06 15:56:53
java reflect 기능을 이용해 보세요.
클래스의 public 맴버나 메소드는 모두 접근 가능합니다.
예) R.drawable.class.getDeclaredField(String name)
자세한 내용은 Java doc의 java.lang.Class.getDeclaredField(String name)
클래스의 public 맴버나 메소드는 모두 접근 가능합니다.
예) R.drawable.class.getDeclaredField(String name)
.get(
R.drawable);자세한 내용은 Java doc의 java.lang.Class.getDeclaredField(String name)
와
java.lang.reflect.Field.get(Object)을 참조하세요.
2010.09.06 16:02:24
Resources 클래스의 getIdentifier 메소드를 이용하면 원하는 것을 하실 수 있을 겁니다.
http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,%20java.lang.String,%20java.lang.String)
http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,%20java.lang.String,%20java.lang.String)
2010.09.06 16:17:54
R.java 에 보시면 16진수로 모든 이미지가 수치화 되어 있거든요 그걸 복사 해서 사용하시면 되겠죠?
자 예를 들어서
public static final int a1white=0x7f020000; <<-- 이런 파일이 있습니다...제가 만든 흰색 공인데요 R.java에 가서 보시면 저렇게
0x7f020000 이클립스에서 알아서 설정이 됩니다!! 만약에 이미지가 100개다! 그러면
0x7f020001
0x7f020002
0x7f020003
이런식으로 저장이 됩니다! 그러면 우리는 어찌해야 곘습니까? for 문을 아시는지요?? 아시겠져? 모르시나요? 그럼 혼나요!!! -_-+
for(int i = 0,id =0x7f02000 ; i < 100; i++,id+=0x00000001){
Imgball[i] = BitmapFactory.decodeResource(getResources(),id);
}
Imgball[100] <-- Bitmap 선언해 놓으셔야 겠죠?
그러면 저렇게 쭈르르르르륵! 드러간답니다.... 하지만 문제점은
이클립스는 고놈이 수시로 디버깅을 해버려서
abc.png 파일과 adc.png 파일이 있으면 이름순으로 16진수정렬을 새로 해버린답니다..
팁을 드리자면.. 이미지 이름을 항상 a1****.png, a2****.png 이런식으로 알파벳 순으로 넣어주면 상관없다는거!!!!
자 예를 들어서
public static final int a1white=0x7f020000; <<-- 이런 파일이 있습니다...제가 만든 흰색 공인데요 R.java에 가서 보시면 저렇게
0x7f020000 이클립스에서 알아서 설정이 됩니다!! 만약에 이미지가 100개다! 그러면
0x7f020001
0x7f020002
0x7f020003
이런식으로 저장이 됩니다! 그러면 우리는 어찌해야 곘습니까? for 문을 아시는지요?? 아시겠져? 모르시나요? 그럼 혼나요!!! -_-+
for(int i = 0,id =0x7f02000 ; i < 100; i++,id+=0x00000001){
Imgball[i] = BitmapFactory.decodeResource(getResources(),id);
}
Imgball[100] <-- Bitmap 선언해 놓으셔야 겠죠?
그러면 저렇게 쭈르르르르륵! 드러간답니다.... 하지만 문제점은
이클립스는 고놈이 수시로 디버깅을 해버려서
abc.png 파일과 adc.png 파일이 있으면 이름순으로 16진수정렬을 새로 해버린답니다..
팁을 드리자면.. 이미지 이름을 항상 a1****.png, a2****.png 이런식으로 알파벳 순으로 넣어주면 상관없다는거!!!!
불가할껄요.. Resource class는 고유값을 가지는 거라.
리소스 아이뒤가 중간에 다른 임의의 리소스가 들어갈 수 없는 연속성을 가진다면
R.drawable.image_001 + i 로 접근을 할 수 있습니다.
(i는 1~100 사이의 임의의 인덱스)