2014-06-17 3 views
0

드로어 블 리소스 폴더에서 비트 맵 이미지를 표시하려고합니다. 개체를 클릭하면 해당보기에 해당하는 이미지를 표시 할 수 있기를 원합니다. 다음은 내 코드와 XML입니다.문제가 있습니다. 비트 맵 이미지

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/black" > 

<TextView 
    android:id="@+id/pokemon_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:textColor = "@color/white" 
    android:layout_marginTop = "6dp" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<ImageView 
    android:id="@+id/pokemon_image" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_below="@+id/pokemon_name" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="44dp" 
    android:contentDescription="@string/cd" /> 

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/pokemon_image" 
    android:layout_centerHorizontal="true" > 

</ListView> 
</RelativeLayout> 

그래서 문제는 비트 맵을 사용하여 만드는 이미지가 표시되지 않는다는 것입니다. PNG 파일의 이름이 내가 클릭 한 객체의 이름과 같아 지도록 Drawable Resources 폴더를 반복합니다. 내 로그 문에서 그것은 if 검사를 통과하는 것 같지만 그것을 실행하려고하면 내 이미지를 형성하지 않습니다.

image = (ImageView) findViewById(R.id.pokemon_image); 

    Field[] fields = R.drawable.class.getFields(); 

    int resourceID = -1; 

    for(int count=0; count < fields.length; count++) 
    { 
     Log.i("Drawable Asset: ", fields[count].getName()); 
     Log.d("tag", "Resource ID is " + resourceID); 

     Log.d("check", "Resource ID and name are the same: " + 
       fields[count].getName().equals(name.toLowerCase(Locale.ENGLISH))); 

     if(fields[count].getName().equals(name.toLowerCase(Locale.ENGLISH))); 
     { 
       try { 
        resourceID=fields[count].getInt(fields[count]); 
        bm = BitmapFactory.decodeResource(getResources(), resourceID); 

        image.setImageBitmap(bm); 
       } catch (IllegalArgumentException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
     } 
    } 

모든 도움을 주실 수 있습니다.

답변

0

Oringinal answer deleted, 적용 할 수 없습니다.

새로운 답 :

대신 반사의 사용

이름은 드로어 블 표시 할 얻기 위해 파일의 이름입니다
Drawable drawable = getResources().getDrawable(getResources() 
        .getIdentifier(name, "drawable", getPackageName())); 

.

리소스 대신 자산을 사용하십시오. 이름으로 찾는 경우 더 적합합니다.

+0

비트 맵을 통해 다른 것으로 설정하려고 했으므로 필요하지 않다고 생각했습니다. – user3717258

+0

코드에서 설정하는 경우에는 표시하지 않지만 실제로 줄을 맞췄습니까? 나는 위의 코드에 어떤 이름이 있는지 (우리는 그 값을 보지 못함) 모르겠다.하지만 그와 같은 반성을하는 것은 매우 비정상적이며 아마도 잘못된 것이다. 네가하려는 일을 알아낼 수조차 없다. 그러나 리소스에있는 모든 드로어 블을 반복한다고 생각한다면 확실히 그렇지 않습니다. Drawable 클래스의 모든 내부 변수를 반복합니다. –

+0

솔직히 말해서 나는이 코드를 작성하는 것이 자신의 앱이기 때문에 약간의 두려움이있다. 이름은 잘 전달되지만, Log.d 문장을 살펴보면 드로어 블 리소스를 반복했다. 모든 드로어 블 리소스의 배열을 만들고 이름과 같은지 확인하고 싶습니다. (그래서 Log.d를 실행하여 같음을 확인한 곳에서 내가 의도 한 것으로 밝혀졌습니다.) 그래서 if 문 안에 들어갔다는 것을 알았지 만 try 블록 안에서는 아무 것도하지 않았다. – user3717258

관련 문제