안녕하세요 초보 개발자입니다.
Sdcard 에 저장되어있는 Folder 리스트에는 각각에 이미지가 들어있는데
폴더에 들어있는 모든 이미지가 gridview 형식으로 나타나고 있습니다.
각 폴더에서 이미지를 gridview 형식으로 보여주고 싶은데 어떻게 해야될지
부탁드립니다.
아래의 코드는 하나의 Folder 를 클릭 했을때 gridview 이미지를 보여주는 부분입니다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview);
init_phone_image_grid();
}
private void init_phone_image_grid() {
String[] img = { MediaStore.Images.Thumbnails._ID };
// imagecursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, img, null,
// null, MediaStore.Images.Thumbnails.IMAGE_ID + "");
image_column_index = imagecursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
count = imagecursor.getCount();
imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
imagegrid.setAdapter(new ImageAdapter(getApplicationContext()));
}
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position,View convertView,ViewGroup parent) {
System.gc();
ImageView i = new ImageView(mContext.getApplicationContext());
if (convertView == null) {
imagecursor.moveToPosition(position);
int id = imagecursor.getInt(image_column_index);
i.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
""+ id));
i.setScaleType(ImageView.ScaleType.CENTER_CROP);
i.setLayoutParams(new GridView.LayoutParams(92, 92));
}
else {
i = (ImageView) convertView;
}
return i;
}
}




썸네일이라고 하기에는 좀 큽니다. 원본보다는 훨 작지만 썸네일로 쓸 사이즈보단 큽니다. 그렇다고 다시 사이즈 줄이는 작업 해봤자
i.setScaleType(ImageView.ScaleType.CENTER_CROP);
버벅거리고 화질은 너무 나빠집니다.
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI 가 왜 있는지 잘 모르겠...
다음걸 사용하는게 좋을거 같습니다. 커서는 원본데이타가 있는곳을
imagecursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
proj, null, null, null);
getView에서 세팅할 이미지는 다음과 같은 식으로 얻어오세요. imageLongID는 원본이미지ID 입니다.
Bitmap bmp = Images.Thumbnails.getThumbnail(mContentResolver,
imageLongID.get(position), Images.Thumbnails.MICRO_KIND, null);