안드로이드 폰마다 해상도가 달라서 그리드뷰에서 이미지가 다르게 나오는군요~
폰의 화면 해상도에 따라 각 셀의 이미지 폭을 계산하는 방법입니다.
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:columnWidth="100dp"
android:numColumns="3"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
위의 android:numColumns 숫자로 Width 를 나누면 됩니다.
그리고 나누기 전에 horizontalSpacing 이 있으므로 그 값을 미리 빼서 나누어야 합니다.
mGridView = (GridView)findViewById(R.id.gridview);
mCellSize = (this.getResources().getDisplayMetrics().widthPixels - mGridView.getRequestedHorizontalSpacing() ) / 3;
여기서 구한 mCellSize 를 mGridView.setAdapter 함수 호출시 값을 전달합니다.
mGridView.setAdapter(new ImageAdapter(getBaseContext(), thumbPath, mCellSize));
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private int mCellSize = 0;
public ImageAdapter(Context c, String[] thumbPath, int cellSize) {
mContext = c;
mCellSize = cellSize;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if(convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(mCellSize, mCellSize));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(1, 1, 1, 1);
}
else {
imageView = (ImageView)convertView;
}
imageView.setImageURI(Uri.parse(thumbPath[position]));
return imageView;
}
}
GridView에 자동으로 표시하는 옵션이 생기면 좋을텐데 아쉽군요~