안드로이드 갤러리(Gallery)
java.lang.Object
└ android.view.View
└ android.view.ViewGroup
└ android.widget.AdapterView<T extends android.widget.Adapter>
└ android.widget.AbsSpinner
└ android.widget.Gallery
안드로이드 갤러리란?
갤러리란 뜻은 혼자만의 머릿속에는 존재하지만 누군가에게 설명하기에는 참 애매하더군요. 그래서 백과사전에 한번 찾아 보았습니다.
갤러리 [ gallery ] 네이버 백과사전
골프에서 경기를 관전하러 온 관중을 말한다.
본문과 상관은 없지만 저는 처음 접한 뜻이라 한번 올려 봤습니다. 이제 진짜로 돌아 가겠습니다.
미술관 [ 갤러리 ] 위키백과
미술관(美術館)이란, 미술작품을 중심으로 한 문화유산이나 현대의 문화적인 유산을 수집·보존·전시하고, 문화에 관한 교육·보급·연구를 행하는 시설이다.
위키백과에 나와있는 것처럼 안드로이드에서 갤러리도 마치 미술관의 그림들 처럼 이미지들을 한장한장 나열해 놓은 형태를 가지고 있습니다.
안드로이드에서는 여러개의 이미지를 좌우 수평으로 스크롤되는 어댑터 뷰의 일종으로 중간에 현재 선택된 이미지가 보이며 좌측에는 이전이미지 우측에는 이후 이미지들이 표시가 됩니다.
그럼 먼저 안드로이드 갤러리만의 속성을 한번 살펴보도록 하겠습니다.
xml 속성 이름 |
자바 메소드 이름 |
설명 |
android:animationDuration |
setAnimationDuration(int) |
layout이 바뀔때 변환되는 애니메이션의 설정시간( 밀리세컨드) |
android:gravity |
setGravity(int) |
샐들의 정렬을 설정. |
android:spacing |
setSpacing(int) |
간격 설정 |
android:unselectedAlpha |
setUnselectedAlpha(float) |
선택되지 않은 녀석들의 알파값 설정 |
그럼 이제 간단한 예제를 통해 좀더 상세히 알아 보도록 하겠습니다. 만들고하 하는 녀석의 결과는 아래와 같습니다.
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
먼저 메인 레리아웃인 main.xml안에 위와 같이 작성합니다. 보시는 바와 같이 전체 화면을 Gallery로 만들었습니다.
HelloGallery.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Gallery gallery = (Gallery) findViewById(R.id.gallery); -- ㉠
gallery.setAdapter(new ImageAdapter(this)); -- ㉡
gallery.setOnItemClickListener(new OnItemClickListener() { -- ㉢
public void onItemClick(AdapterView parent, View v, int position, long id) {
Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
㉠ - HelloGallery.java파일 안에 갤러리를 main.xml로 부터 읽어 옵니다.
㉡ - 갤러리에다가 어댑터를 설정합니다. 어댑터의 상세 설정은 하단에 나와 있습니다.
㉢ - 보여지는 갤러리중 하나의 이미지를 선택했을때 어떤 행위를 하기 위해 이벤트를 설정합니다. 지금은 간단히 토스트만 띄웁니다.
res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="HelloGallery">
<attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private Integer[] mImageIds = {
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
};
public ImageAdapter(Context c) {
mContext = c;
TypedArray attr = mContext.obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = attr.getResourceId(
R.styleable.HelloGallery_android_galleryItemBackground, 0);
attr.recycle();
}
public int getCount() {
return mImageIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mImageIds[position]);
imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setBackgroundResource(mGalleryItemBackground);
return imageView;
}
}
위에 대한 상세 내용들은 이미 앞 포스팅에서 설명을 모두 했습니다. 그러하니 확인하시고 궁금하신 사항들은 댓글로 남겨주시면 되겠습니다.
이로써 자주 쓰이는 어댑터 관련 포스팅을 모두 마치게 되었습니다. 잘 모르겠다 싶은 것들은 다시 한번더 읽어 보시구요. 언제든지 궁금하신 사항들은 댓글로 남겨주시면 최대한 알려드리도록 노력하겠습니다.