흠.. 지난 첫번째 숙제가 .. activity 전환 이었죠?
저 같은 경우는 액티비티 전환 후 프로젝트에 포함된 이미지를 차례대로 보여주는 샘플을 만들었는데
기억 하실런지 모르겠지만 그 때 이미지 리소스 아이디를 얻는 방법에 좀 문제가 있었죠 -0-
그떄 다른분들이 제기 하셨던 문제 "구동되는 환경에 따라서 이미지 리소스 아이디의 값이 변경될 수 있다" 였습니다.
문제가 된 코드는 아래와 같습니다.
int nCurrentImageIndex = R.drawable.su1; public void handleMessage(Message msg) { imageView.setImageResource(nCurrentImageIndex++); if(nCurrentImageIndex > R.drawable.su5) nCurrentImageIndex = R.drawable.su1; } |
R.drawable.su1 부터 su5까지 그냥 순차적으로 증가를 시키는데.. 저게 항상 1씩 증가한다는 보장이 없습니다.
제가 생각했던 문제는 이미지를 더 추가하는 경우 추가된 이미지 리소스 아이디가 아이디가 순차적으로 안되는 부분만 생각했었는데
다른 부분까지 지적해 주시더군요 -0-
그래서 생각난 김에 간단하게 수정보았습니다.
방법 : 배열에 리소스 아이디 저장하기
final static int nMaxImageCount = 5; int nIndex = 0; int[] nImageIndex = {R.drawable.su1 ,R.drawable.su2 ,R.drawable.su3 ,R.drawable.su4 ,R.drawable.su5 };
Handler handler = new Handler(){ public void handleMessage(Message msg) { imageView.setImageResource(nImageIndex[nIndex++]); if(nIndex >= nMaxImageCount) nIndex = 0; } }; |
보시는 것처럼 배열에 리소스 아이디를 집어넣어서 사용하면..될것 같습니다.
이 외에는 이런저런 방법들이 있을텐데..
예를 들어 프로젝트에 포함되지 않고, 외부 폴더에 모여 있는 이미지를 사용하고 싶다면
이미지 매니져 클래스를 하나 만들어서 uri(이거 맞나요 -_-??)를 넘겨 주면 모든 이미지를 읽어 들이고
MaxCount 값을 구해서 하는 방법이 있겠네요 -0-
그리고 한가지 덧붙이자면, 우리 이번주 숙제를 할때 아답터랑, 리스너 사용하셔야 되죠?
아탑터나 리스너 같은 경우 C++ 같은 언어에는 비슷한 개념 조차 없습니다.
대학교떄 잠깐 해봐서 기억이 가물가물 하지만 Visual Basic에서도 그런건 없었는데
자바에서는 왜 그런게 있는지 한번 쯤 고민해 보시면 재미 있을 껍니다.




ㅎㅎ 포인터인덱스 역활을 하는것만 주의하면 되는거죠.. 아답터랑..리스트는 C++ 에서는 없지요..--;;