마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

뷰의 아이디를 문자열로 넘기는 방법

0 추천

이미지 뷰 아이디를 문자열로 넘기고 싶습니다.

 

텍스트 뷰 아이디는 바꾸는 방법이 있따길래 이미지 뷰에도 적용해보았더니 되질 않습니다.

 

 

 

ImageView position2 = (ImageView)findViewById(R.id.img_position2);//포지션 이미지
        BitmapDrawable img_position = null;
        if(str.equals("ST")){
            img_position = (BitmapDrawable)getResources().getDrawable(R.drawable.st);
            position2.setImageDrawable(img_position);
        }

이러한 소스를

public void setting(String str)
ImageView position = (ImageView)findViewById(R.id.img_position);//포지션 이미지
        BitmapDrawable img_position = null;
        String type = "id";
        String pack = getPackageName();
        int viewId = getResources().getIdentifier(str, type, pack);
        img_position = (BitmapDrawable)getResources().getDrawable(viewId);
        position.setImageDrawable(img_position);

이런식으로 바꿔줬는데 사용하는 함수가 다른건가요

브루스웨인 (8,580 포인트) 님이 2014년 3월 22일 질문

1개의 답변

0 추천
 
채택된 답변

setImageDrawable 는  bitmap (drawable) 을 설정하는 메소드 입니다.

지금 구조는 image view 에 image view 를 set 하는 형태죠

aucd29 (218,390 포인트) 님이 2014년 3월 26일 답변
브루스웨인님이 2014년 7월 19일 채택됨
음.. 잘 이해가 안가서요.

기존소스가 이미지뷰에 이미지뷰를 셋하는 형태라는 말씀인가요?
type 이 id 이니 str 값이 ImageView position2  인걸로 생각되어 이야기 드린 것 이구요, image view 에 할당되어 있는 drawable 의 id 값이 str 이면 type을 drawable 로 변경하셔야죠
ImageView position2 = (ImageView)findViewById(R.id.img_position2);//포지션 이미지
        BitmapDrawable img_position = null;
        if(str.equals("ST")){
            img_position = (BitmapDrawable)getResources().getDrawable(R.drawable.st);
            position2.setImageDrawable(img_position);
        }

궁금한게

R.drawable.st
여기서 st가 이미지파일명이잖아요

int viewId = getResources().getIdentifier(str, type, pack);

여기서 뷰아이디를 받아오는데 int형이니가  R.drawable.st 이런 문자열형식이 아닐텐데

어떻게 이미지를 가져온다는거죠?

저는 이렇게 생각하고 있었어요

 R.drawable.st 이 부분이
getResources().getIdentifier(st, drawble , R);
이렇게 받아오는ㄱ ㅔ 맞나요?

int 값은 0 이 떨어집니다.
viewid 는 drawable 에 해당하는 id 값을 가져오는 것으로서
R.drawable.st == getResources().getIdentifier("st", "drawable", pkgName);
입니다.
viewid 가 drawableid 이므로  getDrawable(viewid) 가 가능해지죠 직접 drawable 을 가져오는게 아니고 id 를 가져오는 것 입니다.

아래의 코드를 참조하세요
https://github.com/aucd29/my-prj-testcode/blob/master/android/my-prj/sarang-libs-ui-imgloader/src/net/sarangnamu/common/ui/imgloader/ImageLoaderBase.java
...