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
;
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);
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();
}
}