- 편의상 편하게 쓸랍니다 -

안드로이드에서 제공하는 모든 이미지 관련 API는 기기내의 MediaStorage를 기반으로 한다. 

ThumbNail을 생성해주는 Images.Thumbnails.getThumbnail 메서드 또한 기기내의 파일을 위한 것이다.

구글에서 제공하는 Demo에서 사용되는 것 역시 기기(이하 로컬)내의 파일이다.

Activity에 GridView를 불러들이고 gridView에 ImageAdapter를 사용하여 그리드를 구현한다는 것인데 - 
(Adapater 사용은 구글에서 권고하는 가이드 라인에 포함되어 있는 코딩 방법이다)

Demo에 나와있는 아주 표준적인 ImageAdapter를 먼저 살펴보자...


public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}

간단한 구조로 되어있다. 또한 이미지를 res/drawable 폴더에 다 넣어서 직접 가져다 쓰고 있다.
이건 로컬의 이미지를 구현하기 위한 방법이므로 아주 적당하다고 할 수 있다. 
(하지만 100장이 넘는 이미지라면..? ID 다 적어줄 건가..? 당신은 어찌할 것인가??)

우선 그리드를 구성하는 하나의 이미지는 ImageView로 구성이 된다.
그리고 이 ImageView는 getView()에서 생성이 되는데 ImageView의 핵심인 이미지 파일의 정보 또한 getView()에서 처리되고 있다.

ImageAdapter를 사용하는 방법은 다음과 같다.

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

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));
}



기본적인 Demo에 관련된 자세한 사항은 이 글보다는 아래 글을 참고하길 바란다.


로컬의 이미지들을 처리할 것이라면 정말 이보다 좋은 방법은 있을 수 없다.
또한 이미 생성된 ImageView는 재사용(recycled)이 가능하기 때문에 자원(resource) 관리에도 도움이 된다.

로컬에서의 이미지 처리시 생각해야할 부분은 이미지 정보들을 어떻게 가져올 것인가에 대한 것이다.

가장 극단적인 예로 SD 카드의 이미지를 처리할려고 하면 정말 코드 몇줄이면 끝나지만 - 
자신이 만들고 있는 어플에서 쓸 이미지를 부를거라면? 
근데 그 이미지들이 1~2장이 아니라 100장이 된다면?  언제 R.id.xx 해서 100개 다 찍고 있을건가.?

즉 GridView를 이용하여 웹(또는 로컬)에서 이미지를 가져와 작업을 하려면 위 사항을 최소한으로 생각해보아야 한다.





계속 쭉쭉 이어 적을려고 했으나 퇴근시간이고 맥주타임이 기다리고 있기에 이까지 적고 - 
기본적인 웹에서 이미지 불러오는 것을 단계적으로 해결해 나가는 글을 차례로 적어 보렵니다... 

아마.. 다음글은  웹 이미지를 GridView로 불러와 보기 및 문제점 인식이 되겠네요.

+ Recent posts