여러 개의 이미지를 이름으로 찾아서 화면에 추가하기

참고 프로젝트: ImageViewDemoC1

이번에는 drawable 디렉터리에 있는 여러 개의 이미지를 읽어서 화면에 추가하는 작업을 해보겠다. 일반적으로 이미지 이름을 사용해서 findViewById() 메소드로 이미지를 찾아오지만, 이번 예제에서는 그렇게 하지 않고 이미지 이름을 배열에 저장하고 이 배열에 있는 이미지 이름으로 리소스를 찾아와서 이미지뷰에 설정할 것이다.

레이아웃 XML에는 리니어 레이아웃만 선언한다. 그리고 이 레이아웃에 아이디를 부여하고 이 아이디를 사용해서 레이아웃에 이미지뷰를 추가할 것이다.

코드 레이아웃 XML - /res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

</LinearLayout>

화면에 보여줄 여러 개의 이미지를 drawable-hdpi 디렉터리에 추가한다.

그리고 이제 여러 개의 이미지를 "R.drawable.angel"가 아닌 "angel"이라는 이름으로 읽을 수 있도록 이미지 이름을 가지고 있는 icons 배열을 하나 선언한다. 그리고 getIdentifier() 메소드를 사용해서 이미지 리소스 아이디를 구하고, 이 리소스 아이디를 이미지뷰의 setImageResource()에 인자로 넘겨주어 이미지를 이미지뷰에 설정한다. 그리고 리니어 레이아웃에 이미지뷰를 추가한다. 이러한 과정을 이미지의 개수만큼 반복하면 화면에 이미지들이 보이게 된다. 다음은 이렇게 동작하도록 코드를 작성한 것이다.

코드 Main.java

package com.androidside.imageviewdemoc1;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class Main extends Activity {
    String[] icons = { "angel", "crying", "happy", "kissing" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        LinearLayout layout = (LinearLayout) findViewById(R.id.layout);

        for (int i = 0; i < icons.length; i++) {
            int resId = getResources().getIdentifier(icons[i], "drawable",
                    "com.androidside.imageviewdemoc1");

            ImageView image = new ImageView(this);
            image.setImageResource(resId);

            layout.addView(image);
        }
    }
}

results matching ""

    No results matching ""