2011-01-18 7 views
1

정말 간단하다면 사과하지만 사과를 이해할 수 없습니다. 버튼 클릭을 기반으로 런타임에 이미지를 변경하려는 ImageButton이 있습니다. 내 res 폴더에 5 개의 이미지가 있습니다. 사용자가 "다음"버튼을 누르면 다음 이미지로 이동합니다. 내가 아는 이미지의 이름은 image1.png되는 파일, image2.png 등문자열로 Android 드로어 블 리소스에 액세스하기

당신은 수행하여 이미지를 변경할 수 있습니다

imgButton.setImageResource(R.drawable.image2); 

내가 추적하는 카운터 (int)를 가지고 이미지 번호가 표시됩니다. 하지만 어떻게 이미지를 다음 이미지로 바꿀 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.

답변

4

이미지에 대한 참조를 보유 할 정수 배열을 만듭니다 (예 :

int[] images = new int[5]; 
images[0] = R.drawable.image001; 
images[1] = R.drawable.image002; 
images[2] = R.drawable.image003; 
images[3] = R.drawable.image004; 
images[4] = R.drawable.image005; 

그리고 각 클릭에 당신의 카운터를 증가하고 배열에서 값을 사용하여 이미지 리소스를 설정 : 당신이 알고있을 때 어떻게 ...

imgButton.setImageResource(images[counter]); 

쉬운)

+0

답장을 보내 주셔서 감사합니다. 그 일을 생각했지만 약 50 개의 이미지가 있었지만 5 개가 아닙니다 (어딘가에서 0을 잃었습니다). 그 방법이 문제가 되겠습니까? 성능에 영향을 미칩니 까? – Brian

+0

흠, 성능에 특히 큰 영향을주는 것은 상상할 수 없지만 좋은 코드는 만들 수 없습니다. 그것은 주 코드에서 50 개의 끔찍한 선을 지키기 위해 자신의 정적 클래스에서 그것을 터뜨릴 가치가 있을지 모르지만, 나는 깨끗한 코드 매춘부 중 일부입니다. – jsonfry

+0

@Brian 50 이미지는 메모리에 많이 저장할 수 있습니다. –

4

당신 리플렉션을 사용하여 문자열 파일 이름을 기반으로 이미지의 ID를 가져올 수 있습니다.

Field f = R.getClass().getField("image2"); 
int id = f.getInt(null); // use null for static fields 
imgButton.setImageResource(id); 

편집 : 또는 언급이 다른 question, 당신이 getIdentifier()를 이용하여 아이디에 대한 자료를 요청할 수 있습니다. 이것은 정적 const로 가져 오는 것보다 느리지 만 효과가있을 수 있습니다.

관련 문제