Comme je travaille sur l'affichage des images enregistrées dans le dossier sdcard, j'ai trouvé le lien suivant.
Affichage d'images en grille depuis la carte SD .
J'utilise le code suivant pour obtenir des images du dossier spécifié dans sdcard, mais ici, je reçois 0 compte.
MyCode.jav
String[] projection = {MediaStore.Images.Media._ID};
final String[] columns = { MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
MediaStore.Images.Media.DATA + " like ? ",
new String[] {"/my_images"},
null);
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
this.count = imagecursor.getCount();
this.thumbnails = new Bitmap[this.count];
this.arrPath = new String[this.count];
this.thumbnailsselection = new boolean[this.count];
for (int i = 0; i < this.count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
getApplicationContext().getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null);
arrPath[i] = imagecursor.getString(dataColumnIndex);
}
imageAdapter = new ImageAdapter();
secure_gallery_grid.setAdapter(imageAdapter);
imagecursor.close();
Mais ici, selon le lien suivant, toutes les images enregistrées sur la carte SD s'affichent. Mais ici, je veux afficher les images qui sont enregistrées dans un dossier particulier, comme si j'ai créé le dossier "My_images" et les images enregistrées dans ce dossier. Je veux afficher les images de ce dossier et avoir besoin d'afficher dans gridview comme par lien.
Vous pouvez obtenir le chemin des fichiers à partir d'un dossier particulier comme ci-dessous
Une fois que vous obtenez le chemin des fichiers, vous pouvez afficher les images dans gridview
ArrayList<String> f = new ArrayList<String>();// list of file paths
File[] listFile;
public void getFromSdcard()
{
File file= new File(Android.os.Environment.getExternalStorageDirectory(),"TMyFolder");
if (file.isDirectory())
{
listFile = file.listFiles();
for (int i = 0; i < listFile.length; i++)
{
f.add(listFile[i].getAbsolutePath());
}
}
}
N'oubliez pas d'ajouter une autorisation dans le fichier manifeste
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
En ayant une autorisation d'écriture, vous aurez une autorisation de lecture par défaut.
Exemple
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
<GridView
Android:id="@+id/PhoneImageGrid"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:columnWidth="90dp"
Android:gravity="center"
Android:horizontalSpacing="10dp"
Android:numColumns="auto_fit"
Android:stretchMode="columnWidth"
Android:verticalSpacing="10dp" />
</RelativeLayout>
gelleryitem.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
<ImageView Android:id="@+id/thumbImage" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:layout_centerInParent="true" />
<CheckBox Android:id="@+id/itemCheckBox" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true" />
</RelativeLayout>
AndroidCustomGalleryActivity.Java
public class AndroidCustomGalleryActivity extends Activity {
private int count;
private Bitmap[] thumbnails;
private boolean[] thumbnailsselection;
private String[] arrPath;
private ImageAdapter imageAdapter;
ArrayList<String> f = new ArrayList<String>();// list of file paths
File[] listFile;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getFromSdcard();
GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
imageAdapter = new ImageAdapter();
imagegrid.setAdapter(imageAdapter);
}
public void getFromSdcard()
{
File file= new File(Android.os.Environment.getExternalStorageDirectory(),"MapleBear");
if (file.isDirectory())
{
listFile = file.listFiles();
for (int i = 0; i < listFile.length; i++)
{
f.add(listFile[i].getAbsolutePath());
}
}
}
public class ImageAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public ImageAdapter() {
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return f.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(
R.layout.galleryitem, null);
holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
Bitmap myBitmap = BitmapFactory.decodeFile(f.get(position));
holder.imageview.setImageBitmap(myBitmap);
return convertView;
}
}
class ViewHolder {
ImageView imageview;
}
}
Instantané
il n'est pas possible d'afficher des images de dossier particulières à l'aide de la méthode mediastore. car chaque image stockée dans le médiastore a un identifiant unique différent pour l'identifier.
mais vous pouvez le faire en créant votre propre méthode pour identifier les images dans le dossier particulier, puis obtenir les images miniatures de création.
Utilisez Universal Image Loader
https://github.com/nostra13/Android-Universal-Image-Loader.git
Donnez l'URL de l'image comme chemin d'image de votre carte SD.
/**
*adapter class for view pager
*
*/
private class ImagePagerAdapter extends PagerAdapter {
LayoutInflater inflater;
public ImagePagerAdapter() {
inflater=getActivity().getLayoutInflater();
}
@Override
public int getCount() {
return viewPagerList.size();
}
@Override
public void finishUpdate(View container) {
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View imageLayout = inflater.inflate(R.layout.item_pager_image, container, false);
ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
String loadURL=null;
if(connectivityManager.hasDataConnectivity()){
loadURL=viewPagerList.get(position).getModelImageUrl();
}
else {
String fileName=viewPagerList.get(position).getModelImageUrl();
fileName = fileName.replace(':', '/');
fileName = fileName.replace('/', '_');
loadURL="file://"+Environment.getExternalStorageDirectory()+"/"+folder+"/"+fileName;
}
BaseActivity.imageLoader.displayImage(loadURL, imageView, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
spinner.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
String message = null;
switch (failReason) {
case IO_ERROR:
message = "Input/Output error";
break;
case OUT_OF_MEMORY:
message = "Out Of Memory error";
break;
case NETWORK_DENIED:
message = "Downloads are denied";
break;
case UNSUPPORTED_URI_SCHEME:
message = "Unsupported URI scheme";
break;
case UNKNOWN:
message = "Unknown error";
break;
}
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
spinner.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) {
spinner.setVisibility(View.GONE);
Logger.show(Log.INFO, "@@@@@@@", imageUri);
String uniqueUrlName = imageUri.replace(':', '/');
uniqueUrlName = uniqueUrlName.replace('/', '_');
File file = new File(Environment.getExternalStorageDirectory()
.toString()
+ "/"
+ folder
+ "/"
+ uniqueUrlName);
if(!file.exists()){
new Thread(new Runnable() {
public void run() {
String imageUrlString="file://"+GetModels.getModelURL(imageUri,folder,loadedImage,context);
Logger.show(Log.INFO, context.getClass().getName(), "image loaded my folfer"+ imageUrlString);
}
}).start();
}
Logger.show(Log.INFO, context.getClass().getName(), "image loaded loader "+ StorageUtils.getCacheDirectory(context));
}
});
imageView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Bundle b=new Bundle();
b.putString("ProductName", viewPagerList.get(pos).getModelName());
b.putString("ProductPrice", viewPagerList.get(pos).getModelPrice());
b.putString("ProductUrl",viewPagerList.get(pos).getModelLink() );
String loadURL=null;
if(connectivityManager.hasDataConnectivity()){
loadURL=viewPagerList.get(pos).getModelImageUrl();
}
else {
String fileName=viewPagerList.get(pos).getModelImageUrl();
fileName = fileName.replace(':', '/');
fileName = fileName.replace('/', '_');
loadURL="file://"+Environment.getExternalStorageDirectory()+"/"
+folder+"/"+fileName;
}
b.putString("ProductImage", loadURL);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,R.anim.slide_in_left, R.anim.slide_out_right);
ProductOverview commentFragment = new ProductOverview();
commentFragment.setArguments(b);
fragmentTransaction.replace(R.id.product_container, commentFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
((ViewPager) container).addView(imageLayout, 0);
return imageLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View container) {
}
}