안녕하세요 초보 개발자 입니다.
sdcard 에 여러개의 폴더 리스트를 만들고 특정폴더의 이미지가 들어가 있은경우 하나의 폴더내에 이미지만 gridview 보여주고 싶은데
managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, img, null,
// null, MediaStore.Images.Thumbnails.IMAGE_ID + "");
를 사용 했을경우 sdcard 내에 전체의 이미지가 gridview 로 보여 줘서
getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, "bucket_display_name=test1", null, null);
로 했을 경우 test1 폴더의 들어가 있는 이미지는 정상적으로 나타나는데 이경우는 절대경로로 보여주는거고
상대경로 즉 사용자가 test2 ,test3 폴더의 이미지를 보여주고 싶을때는
bucket_display_name 을 이용하여 어떻게처리 해야되는지 궁금합니다..
EXTERNAL_CONTENT_URI 사용하지 않았습니다.
gridview 진입시 선택된 폴더의 path 를 넘겨 받아 폴더내의 이미지 list 의 정보를 구하여 gridview 를 구현 하였습니다.
수정한 코드 입니다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview);
//init_phone_image_grid();
Bundle extras = getIntent().getExtras();
mIMAGE_PATH = extras.getString("Imagepath");// 폴더 리스트에서 넘겨 받은 폴더 path
String str = getIntent().getExtras().getString("folername");
updateList();
imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
imagegrid.setAdapter(new ImageAdapter(getApplicationContext()));
imagegrid.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v,int position, long id) {
Intent i = new Intent(Gridview.this, imageview.class);
//i.putExtra("filename", IMAGE_PATH + file.getAbsolutePath());
i.putExtra("filename", mIMAGE_PATH + "/" + ImageList[position]);
i.putExtra("imagepath", mIMAGE_PATH);
i.putExtra("imagelist", ImageList);
i.putExtra("currentposition", position);
startActivity(i);
}
});
}
public void updateList(){
File imagefiles = new File(mIMAGE_PATH);
int i;
if (imagefiles == null)
return;
ImageList = imagefiles.list(filter);
imageList = new ArrayAdapter<String>(this,R.layout.imageitem,ImageList);
imageList.sort(myComparator); //file sorting
thumbsDataList = new ArrayList<String>();
for(i=0; i<imageList.getCount();i++ ){
thumbsDataList.add(mIMAGE_PATH+ "/" +ImageList[i]); // arraylist 에 파일이름 추가.. 전체 경로를 넘겨받음
}
//}
}
private FilenameFilter filter = new FilenameFilter(){
public boolean accept(File dir, String filename) {
if(filename.endsWith(".JPG") || filename.endsWith(".jpg")) return true;
return false;
}
};
private final static Comparator <String> myComparator= new Comparator<String>() {
private final Collator collator = Collator.getInstance();
@Override
public int compare(String o1,String o2) {
return collator.compare(o1.intern(), o2.intern());
}
};
public class ImageAdapter extends BaseAdapter {
private String imgData;
private String geoData;
ImageAdapter(Context c){
mContext = c;
}
public boolean deleteSelected(int sIndex){
return true;
}
public int getCount() {
return thumbsDataList.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null){
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(95, 95));
imageView.setAdjustViewBounds(false);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(2, 2, 2, 2);
}else{
imageView = (ImageView) convertView;
}
BitmapFactory.Options bo = new BitmapFactory.Options();
bo.inSampleSize = 8;
Bitmap bmp = BitmapFactory.decodeFile(thumbsDataList.get(position), bo);
Bitmap resized = Bitmap.createScaledBitmap(bmp, 95, 95, true);
imageView.setImageBitmap(resized);
return imageView;
}
}
}
http://shinluckyarchive.tistory.com/469
http://mainia.tistory.com/497