안드로이드 폰마다 해상도가 달라서 그리드뷰에서 이미지가 다르게 나오는군요~
폰의 화면 해상도에 따라 각 셀의 이미지 폭을 계산하는 방법입니다.
<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에 자동으로 표시하는 옵션이 생기면 좋을텐데 아쉽군요~
반응형
'안드로이드' 카테고리의 다른 글
[안드로이드] Bluetooth keeps stopping Android x86 (1) | 2019.07.10 |
---|---|
[안드로이드] WebView ERR_CLEARTEXT_NOT_PERMITTED 에러 (0) | 2019.05.28 |
[안드로이드] 웹 링크 특정앱 실행 방법 (0) | 2019.05.27 |
[안드로이드] HTML URL 자동 링크 걸어주기 (0) | 2019.05.24 |
[안드로이드] 애드몹 배너광고 예제 사이트 (0) | 2019.05.23 |