SD카드에서 이미지 불러오는 갤러리 화면 구현중인데요..
GridView로 이미지를 뿌려주는데.. 스크롤을 내린뒤 다시 올리면
이미 로드되었던 이미지들이 다시 로드 됩니다..
UIL 라이브러리는 어댑터의 getView 안에서 사용중이구요..
config와 option.. 다 첨부하니 도와주세요.. 구글링 해서 이거저거 바꿔봤는데도
자꾸 이미지를 재로드 하네요...
<config>
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 * 1024) // 50 Mb
.diskCacheFileCount(100)
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.tasksProcessingOrder(QueueProcessingType.LIFO)
.build();
//Initialize ImageLoader with configuration
ImageLoader.getInstance().init(config);
<option>
if(this.options == null){
this.options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_photo_loading_white_24dp)
.showImageForEmptyUri(R.drawable.ic_photo_empty_white_24dp)
.showImageOnFail(R.drawable.ic_photo_fail_white_24dp)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.build();
}
<xml>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<GridView
android:id="@+id/gallery_detail_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:padding="2dp"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center"/>
</FrameLayout>
<fragment>
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Dlog.d("onActivityCreated");
/* Detail 갤러리 */
GridView gv = (GridView) mGalleryActivity.findViewById(R.id.gallery_detail_grid);
final GalleryAdapter galleryAdapter = new GalleryAdapter(mGalleryActivity);
gv.setAdapter(galleryAdapter);
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Toast.makeText(galleryAdapter.mContext, galleryAdapter.mThumbPaths[position], Toast.LENGTH_SHORT).show();
Toast.makeText(galleryAdapter.mContext, "GalleryDetailFragment onItemClick", Toast.LENGTH_SHORT).show();
}
});
}
static class ViewHolder{
ImageView imageView;
}
public class GalleryAdapter extends BaseAdapter {
Context mContext;
Cursor mCursor;
String mPrefixPath;
String mThumbPaths[];
String mSortOrder;
DisplayImageOptions options;
GalleryAdapter(Context context){
this.options = ((TripColorApp)mGalleryActivity.getApplicationContext()).getDisplayImageOptions();
this.mContext = context;
this.mPrefixPath = "file:///";
this.mSortOrder = MediaStore.Images.Media.DATE_MODIFIED + " DESC";
String where;
if( mBucketId != null ){
where = MediaStore.Images.Media.BUCKET_ID + " = " + mBucketId;
}else{
where = null;
}
Dlog.d("where : " + where);
ContentResolver cr = mGalleryActivity.getContentResolver();
mCursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, where, null, mSortOrder);
int imageCount = mCursor.getCount();
mThumbPaths = new String[imageCount];
mCursor.moveToFirst();
//지역코드 조회
while(!mCursor.isAfterLast()){
int index = mCursor.getPosition();
mThumbPaths[index] = mPrefixPath + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA));
mCursor.moveToNext();
}
mCursor.close();
}
@Override
public int getCount() {
return mThumbPaths.length;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder gridViewHolder;
if(convertView == null){
view = mGalleryActivity.getLayoutInflater().inflate(R.layout.gallery_thumbnail, parent, false);
gridViewHolder = new ViewHolder();
gridViewHolder.imageView = (ImageView) view.findViewById(R.id.thumbnail_image);
//gridViewHolder.imageView.setMaxWidth(50);
//gridViewHolder.imageView.setMaxHeight(50);
view.setTag(gridViewHolder);
}else{
gridViewHolder = (ViewHolder) view.getTag();
}
//UIL 라이브러리 사용
ImageLoader.getInstance().displayImage(mThumbPaths[position], gridViewHolder.imageView, options, new SimpleImageLoadingListener() {
boolean cacheFound;
@Override
public void onLoadingStarted(String imageUri, View view) {
((ImageView) view).setScaleType(ImageView.ScaleType.CENTER);
List<String> memCache = MemoryCacheUtils.findCacheKeysForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());
cacheFound = !memCache.isEmpty();
if (!cacheFound) {
File diskCache = DiskCacheUtils.findInCache(imageUri, ImageLoader.getInstance().getDiskCache());
if (diskCache != null) {
cacheFound = diskCache.exists();
}
}
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
((ImageView)view).setScaleType(ImageView.ScaleType.CENTER_CROP);
if (cacheFound) {
MemoryCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());
DiskCacheUtils.removeFromCache(imageUri, ImageLoader.getInstance().getDiskCache());
ImageLoader.getInstance().displayImage(imageUri, (ImageView) view);
}
}
});
return view;
}
}