반응형
|
안드로이드(Android) GridView 를 이용해 이미지 리스트 만들기 |
|
개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2 |
|
이번 예제는 GridView 를 이용해서 이미지들을 리스트 형태로 배치하는 것입니다. 배치한 이미지를 클릭하게 되면 리소스 ID 의 10진수 값을 보여줍니다. |
리스트를 만들기 위해 res/drawable 폴더에 이미지를
넣습니다. 그리고 Integer 배열을 만듭니다.
// references to our images
private Integer[] mThumbIds = { R.drawable.view01,
R.drawable.view02, R.drawable.view03,
R.drawable.view04, R.drawable.view05,
R.drawable.view06, R.drawable.view07
};
다음은 GridView 객체를 생성합니다. 그리고 BaseAdapter 를
상속해서 만든 객체를 셋팅하고 이벤트 객체도 셋팅합니다.
GridView gridview = (GridView) findViewById(R.id.gridview); gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(gridviewOnItemClickListener);
등록한 이벤트 객체는 이미지 클릭시 이미지의 resource id 를
Toast 로 알려줍니다. 값은 아래 그림과 같이 그림에
해당하는 10진수 아이디입니다.
private GridView.OnItemClickListener gridviewOnItemClickListener
= new GridView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0,
View arg1, int arg2,
long arg3) {
Toast.makeText(SampleActivity19.this,
arg0.getAdapter().getItem(arg2).toString(),
Toast.LENGTH_LONG).show();
}
};
GridView 에 Adapter 클래스를 셋팅하는데 getView 함수만
주의 깊게 보시면 됩니다. 첫번째 인수로 넘어온 position 은
이미지배열에서 위치 값입니다.
이미지를 꺼내서 setImageResource() 함수에 셋팅하고
ImageView 객체에 셋팅한후 리턴합니다.
public View getView(int position, View convertView, ViewGroup parent) {
int rowWidth = (mMetrics.widthPixels) / 3;
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(rowWidth, rowWidth));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(1, 1, 1, 1);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
메인 레이아웃 xml 입니다.
GridView 하나밖에 없습니다.
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="auto_fit"
android:stretchMode="spacingWidth"
android:verticalSpacing="10dp" />
메인 activity 소스 입니다.
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
public class SampleActivity19 extends Activity {
// references to our images
private Integer[] mThumbIds = { R.drawable.view01,
R.drawable.view02, R.drawable.view03,
R.drawable.view04, R.drawable.view05,
R.drawable.view06, R.drawable.view07
};
DisplayMetrics mMetrics;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample_activity19);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(gridviewOnItemClickListener);
mMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
}
private GridView.OnItemClickListener gridviewOnItemClickListener
= new GridView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast.makeText(SampleActivity19.this,
arg0.getAdapter().getItem(arg2).toString(),
Toast.LENGTH_LONG).show();
}
};
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 mThumbIds[position];
}
public long getItemId(int position) {
return position;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
int rowWidth = (mMetrics.widthPixels) / 3;
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(rowWidth,rowWidth));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setPadding(1, 1, 1, 1);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
}
}
반응형
'안드로이드 개발' 카테고리의 다른 글
| 안드로이드(Android) SDK 업데이트 후 Please update ADT to the latest version 에러 (0) | 2014.11.05 |
|---|---|
| 안드로이드(Android) 에뮬레이터에서 GPS 정보를 제대로 테스트하기 위한 셋팅 (0) | 2014.11.04 |
| 안드로이드(Android) Animation 클래스 이용해 View, Layout 애니메이션 효과주기 (3) | 2014.11.03 |
| 안드로이드(Android) 레이아웃의 구조를 분석할수 있는 유틸 Hierarchy Viewer (0) | 2014.11.03 |
| 안드로이드(Android) 상태바에 통지(Notifications) 메시지 보내기 (1) | 2014.11.02 |
| 안드로이드(Android) PhoneGap, Eclipse 와 연동하여 개발을 위한 환경셋팅 2부 (0) | 2014.11.01 |
| 안드로이드(Android) PhoneGap, Eclipse 와 연동하여 개발을 위한 환경셋팅 1부 (0) | 2014.11.01 |
| 안드로이드(Android) 통지메시지(Notification) 소리를 MP3 로 연결 (0) | 2014.10.31 |
