public class Main extends Activity {
ProgressDialog mLoagindDialog;
GridView mGvImageList;
ImageAdapter mListAdapter;
ArrayList<ThumbImageInfo> mThumbImageInfoList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.image_list_view);
mThumbImageInfoList = new ArrayList<ThumbImageInfo>();
mGvImageList = (GridView) findViewById(R.id.gvImageList);
new DoFindImageList().execute();
}
private long findThumbList() {
long returnValue = 0;
// Select 하고자 하는 컬럼
String[] projection = { MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA };
// 쿼리 수행
Cursor imageCursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,
null, MediaStore.Images.Media.DATE_ADDED + " desc ");
if (imageCursor != null && imageCursor.getCount() > 0) {
// 컬럼 인덱스
int imageIDCol = imageCursor.getColumnIndex(MediaStore.Images.Media._ID);
int imageDataCol = imageCursor.getColumnIndex(MediaStore.Images.Media.DATA);
// 커서에서 이미지의 ID와 경로명을 가져와서 ThumbImageInfo 모델 클래스를 생성해서
// 리스트에 더해준다.
while (imageCursor.moveToNext()) {
ThumbImageInfo thumbInfo = new ThumbImageInfo();
thumbInfo.setId(imageCursor.getString(imageIDCol));
thumbInfo.setData(imageCursor.getString(imageDataCol));
thumbInfo.setCheckedState(false);
mThumbImageInfoList.add(thumbInfo);
returnValue++;
}
}
imageCursor.close();
return returnValue;
}
// 화면에 이미지들을 뿌려준다.
private void updateUI() {
mListAdapter = new ImageAdapter(this, R.layout.image_cell,
mThumbImageInfoList);
mGvImageList.setAdapter(mListAdapter);
}
static class ImageViewHolder {
ImageView ivImage;
CheckBox chkImage;
}
private class ImageAdapter extends BaseAdapter {
private Context mContext;
private int mCellLayout;
private LayoutInflater mLiInflater;
private ArrayList<ThumbImageInfo> mThumbImageInfoList;
public ImageAdapter(Context c, int cellLayout,ArrayList<ThumbImageInfo> thumbImageInfoList) {
mContext = c;
mCellLayout = cellLayout;
mThumbImageInfoList = thumbImageInfoList;
mLiInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return mThumbImageInfoList.size();
}
public Object getItem(int position) {
return mThumbImageInfoList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mLiInflater.inflate(mCellLayout, parent, false);
ImageViewHolder holder = new ImageViewHolder();
holder.ivImage = (ImageView) convertView.findViewById(R.id.ivImage);
holder.chkImage = (CheckBox) convertView.findViewById(R.id.chkImage);
convertView.setTag(holder);
}
final ImageViewHolder holder = (ImageViewHolder) convertView
.getTag();
if (((ThumbImageInfo) mThumbImageInfoList.get(position)).getCheckedState())
holder.chkImage.setChecked(true);
else
holder.chkImage.setChecked(false);
try {
String path = ((ThumbImageInfo) mThumbImageInfoList.get(position)).getData();
BitmapFactory.Options option = new BitmapFactory.Options();
if (new File(path).length() > 100000)
option.inSampleSize = 10;
else
option.inSampleSize = 2;
Bitmap bmp = BitmapFactory.decodeFile(path, option);
holder.ivImage.setImageBitmap(bmp);
setProgressBarIndeterminateVisibility(false);
} catch (Exception e) {
e.printStackTrace();
setProgressBarIndeterminateVisibility(false);
}
return convertView;
}
}
private class DoFindImageList extends AsyncTask<String, Integer, Long> {
@Override
protected void onPreExecute() {
mLoagindDialog = ProgressDialog.show(Main.this, null, "로딩중...",
true, true);
super.onPreExecute();
}
@Override
protected Long doInBackground(String... arg0) {
long returnValue = 0;
returnValue = findThumbList();
return returnValue;
}
@Override
protected void onPostExecute(Long result) {
updateUI();
mLoagindDialog.dismiss();
}
@Override
protected void onCancelled() {
super.onCancelled();
}
}
안녕하세요.
스마트폰 갤러리의 이미지를 가져와서 gridview로 뿌려주는 소스인데요.
findThumbList() 메소드로 이미지를 select 한 후 ImageAdapter의 getview로 gridview에 이미지를 출력하도록 했습니다.
그런데 테스트 해보니 몇몇 사진들이 회전되어서 나오더라구요. 90도, 180도, 270도 가지각색입니다.
소스에서 사진을 회전시키는 부분은 없는데 혹시 imageview에 넣을때 크기에 관계가 있는건가요?
도움주시면 감사하겠습니다.