How To Show Images From Folder path in Android
Very First: Make Sure You Have Add Permissions into Mainfest file:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
:Make a Class MyGallery
public class MyGallery extends Activity { private GridView gridView; private String _location; private String newFolder = "/IslamicGif/"; private String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); private AdView mAdView; private ArrayList<Bitmap> photo = new ArrayList<Bitmap>(); public static String[] imageFileList; TextView gallerytxt; public static ImageAdapter imageAdapter; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.mygallery); /*if (MenuClass.mInterstitialAd.isLoaded()) { MenuClass.mInterstitialAd.show(); }*/ gallerytxt = (TextView) findViewById(R.id.gallerytxt); /*gallerytxt.setTextSize(20); int[] color = {Color.YELLOW,Color.WHITE}; float[] position = {0, 1}; Shader.TileMode tile_mode0= Shader.TileMode.REPEAT; // or TileMode.REPEAT; LinearGradient lin_grad0 = new LinearGradient(0, 0, 0, 200,color,position, tile_mode0); Shader shader_gradient0 = lin_grad0; gallerytxt.getPaint().setShader(shader_gradient0);*/ ImageButton btn_back = (ImageButton) findViewById(R.id.btn_back); btn_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MyGallery.this.finish(); } }); mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder() .build(); mAdView.loadAd(adRequest); gridView = (GridView) findViewById(R.id.gridView); new MyGalleryAsy().execute(); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { // TODO Auto-generated method stub Intent intent = new Intent(MyGallery.this, ImageDetail.class); intent.putExtra("ImgUrl", imageFileList[pos]); //Toast.makeText(MyGallery.this,"image detail"+pos,Toast.LENGTH_LONG).show(); startActivity(intent); } }); } protected void onStart() { super.onStart(); if (ImageDetail.deleted) { photo = new ArrayList<Bitmap>(); new MyGalleryAsy().execute(); ImageDetail.deleted = false; } } public class MyGalleryAsy extends AsyncTask<Void, Void, Void> { private ProgressDialog dialog; Bitmap mBitmap; @Override protected void onPreExecute() { dialog = ProgressDialog.show(MyGallery.this, "", "Loading ...", true); dialog.show(); } @Override protected Void doInBackground(Void... arg0) { readImage(); return null; } @Override protected void onPostExecute(Void result) { dialog.dismiss(); DisplayMetrics displayMatrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMatrics); int screenWidth = displayMatrics.widthPixels / 3; if (photo.size() > 0) { imageAdapter = new ImageAdapter(MyGallery.this, screenWidth); gridView.setAdapter(imageAdapter); } } } private void readImage() { // TODO Auto-generated method stub try { if (isSdPresent()) { _location = extStorageDirectory + newFolder; } else _location = getFilesDir() + newFolder; File file1 = new File(_location); if (file1.isDirectory()) { // sdCard == true imageFileList = file1.list(); if (imageFileList != null) { for (int i = 0; i < imageFileList.length; i++) { try { photo.add(BitmapFactory.decodeFile(_location + imageFileList[i].trim())); } catch (Exception e) { // TODO: handle exception //Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show(); } } } } } catch (Exception e) { // TODO: handle exception } } public static boolean isSdPresent() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } public class ImageAdapter extends BaseAdapter { private Context context; private LayoutInflater layoutInflater; private int width; private int mGalleryItemBackground; public ImageAdapter(Context c) { context = c; } public ImageAdapter(Context c, int width) { context = c; this.width = width; } public int getCount() { return photo.size(); } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = layoutInflater.inflate(R.layout.galleryadapter, null); RelativeLayout layout = (RelativeLayout) v.findViewById(R.id.galleryLayout); ImageView imageView = new ImageView(context); layout.addView(imageView, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, width)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); layout.setLayoutParams(new GridView.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, width)); imageView.setImageBitmap(photo.get(position)); return v; } public void updateItemList(ArrayList<Bitmap> newItemList) { photo = newItemList; notifyDataSetChanged(); } } }
Now create its Xml Class
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg" android:orientation="vertical"> <RelativeLayout android:id="@+id/relativeLayout" android:layout_width="match_parent" android:layout_height="56dp" android:background="@color/colorPrimary" android:minHeight="?attr/actionBarSize"> <TextView android:id="@+id/gallerytxt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_gravity="center" android:fontFamily="@string/font_fontFamily_medium" android:text="My Gallery" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@android:color/black" android:textStyle="bold" /> <ImageButton android:id="@+id/btn_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_centerVertical="true" android:layout_marginLeft="12dp" android:background="@drawable/ic_arrow_back_black_24dp" /> </RelativeLayout> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_gravity="center|bottom" android:visibility="gone" ads:adSize="BANNER" ads:adUnitId="@string/banner_id" /> <GridView android:id="@+id/gridView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/adView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/relativeLayout" android:horizontalSpacing="5dp" android:numColumns="2" android:smoothScrollbar="true" android:verticalSpacing="5dp"></GridView>
## Also Make Adapter galleryadapter.xml ##
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:ads="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:id="@+id/galleryLayout" android:padding="2dp">
[![enter image description here][1]][1]
To see the Image in Detail create a new Class ImageDetail:##
public class ImageDetail extends Activity implements OnClickListener { public static InterstitialAd mInterstitialAd; private ImageView mainImageView; private LinearLayout menuTop; private TableLayout menuBottom; private Boolean onOff = true; private ImageView delButton, mailButton, shareButton; private String imgUrl = null; private AdView mAdView; TextView titletxt; private String newFolder = "/IslamicGif/"; private String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); public static boolean deleted = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.image_detail); mAdView = (AdView) findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder() .build(); mAdView.loadAd(adRequest); mAdView.setAdListener(new AdListener() { @Override public void onAdLoaded() { mAdView.setVisibility(View.VISIBLE); } }); mainImageView = (ImageView) findViewById(R.id.mainImageView); menuTop = (LinearLayout) findViewById(R.id.menuTop); menuBottom = (TableLayout) findViewById(R.id.menuBottom); titletxt = (TextView) findViewById(R.id.titletxt); titletxt.setTextSize(22); mInterstitialAd = new InterstitialAd(this); mInterstitialAd.setAdUnitId(getString(R.string.interstial_id)); mInterstitialAd.setAdListener(new AdListener() { @Override public void onAdClosed() { requestNewInterstitial(); } }); requestNewInterstitial(); delButton = (ImageView) findViewById(R.id.delButton); mailButton = (ImageView) findViewById(R.id.mailButton); shareButton = (ImageView) findViewById(R.id.shareButton); Bundle exBundle = getIntent().getExtras(); if (exBundle != null) { imgUrl = exBundle.getString("ImgUrl"); } if (isSdPresent()) { imgUrl = extStorageDirectory + newFolder + imgUrl; } else imgUrl = getFilesDir() + newFolder + imgUrl; if (imgUrl != null) { GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(mainImageView); Glide.with(this).load(imgUrl).into(imageViewTarget); } delButton.setOnClickListener(this); mailButton.setOnClickListener(this); shareButton.setOnClickListener(this); } public static boolean isSdPresent() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } @Override public void onClick(View arg0) { // TODO Auto-generated method stub switch (arg0.getId()) { case R.id.shareButton: Image_Link(); break; case R.id.delButton: deleted(); break; case R.id.mailButton: sendemail(); break; default: break; } } private void sendemail() { try { File photo = new File(imgUrl); Uri imageuri = Uri.fromFile(photo); String url = Constant.AppUrl; SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append("Face Placer App Available here..Play Link"); int start = builder.length(); builder.append(url); int end = builder.length(); builder.setSpan(new URLSpan(url), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Intent emailIntent2 = new Intent(Intent.ACTION_SEND); String[] recipients2 = new String[]{"[email protected]", "",}; emailIntent2.putExtra(Intent.EXTRA_EMAIL, recipients2); emailIntent2.putExtra(Intent.EXTRA_SUBJECT, "Sample mail"); emailIntent2.putExtra(Intent.EXTRA_STREAM, imageuri); emailIntent2.putExtra(Intent.EXTRA_TEXT, builder); emailIntent2.setType("text/html"); emailIntent2.setType("image/JPEG"); startActivity(Intent.createChooser(emailIntent2, "Send mail client :")); } catch (Exception e) { // TODO: handle exception Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } } private void Image_Link() { try { File photo = new File(imgUrl); Uri imageuri = Uri.fromFile(photo); String url = Constant.AppUrl; SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append("Face Placer App Available here..Play Link"); int start = builder.length(); builder.append(url); int end = builder.length(); builder.setSpan(new URLSpan(url), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Intent emailIntent2 = new Intent(Intent.ACTION_SEND); String[] recipients2 = new String[]{"[email protected]", "",}; emailIntent2.putExtra(Intent.EXTRA_EMAIL, recipients2); emailIntent2.putExtra(Intent.EXTRA_SUBJECT, "Sample mail"); emailIntent2.putExtra(Intent.EXTRA_STREAM, imageuri); emailIntent2.putExtra(Intent.EXTRA_TEXT, builder); emailIntent2.setType("text/html"); emailIntent2.putExtra(Intent.EXTRA_TEXT, "Face Placer App Available here..Play Link " + url); emailIntent2.setType("image/JPEG"); startActivity(Intent.createChooser(emailIntent2, "Send mail client :")); } catch (Exception e) { // TODO: handle exception Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } } private void deleted() { if (mInterstitialAd.isLoaded()) { mInterstitialAd.show(); } AlertDialog.Builder builder = new AlertDialog.Builder(ImageDetail.this); builder.setTitle(getString(R.string.removeoption)); builder.setMessage(getString(R.string.deleteimage)); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User clicked OK button dialog.cancel(); File fileDel = new File(imgUrl); boolean isCheck1 = fileDel.delete(); if (isCheck1) { deleted = true; finish(); MyGallery.imageAdapter.notifyDataSetChanged(); } else { Toast.makeText(getApplicationContext(), "error", Toast.LENGTH_LONG).show(); } } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User clicked OK button dialog.cancel(); } }); Dialog dialog = builder.create(); dialog.show(); } private boolean isNetworkConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = cm.getActiveNetworkInfo(); if (ni == null) { // There are no active networks. return false; } else return true; } private void requestNewInterstitial() { AdRequest adRequest = new AdRequest.Builder() .addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID") .build(); mInterstitialAd.loadAd(adRequest); } }
Create its xml image_detail.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg" android:orientation="vertical"> <ImageView android:id="@+id/mainImageView" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_alignParentBottom="true" android:contentDescription="@string/app_name" android:focusable="true" android:focusableInTouchMode="true" /> <LinearLayout android:id="@+id/adlayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:orientation="horizontal" android:visibility="gone"></LinearLayout> <LinearLayout android:id="@+id/menuTop" android:layout_width="fill_parent" android:layout_height="56dp" android:layout_alignWithParentIfMissing="true" android:layout_below="@+id/adlayout" android:background="@color/colorPrimary" android:orientation="vertical" android:padding="10.0dip" android:visibility="visible"> <TextView android:id="@+id/titletxt" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="Islamic Gifs" android:textColor="#000000" android:textSize="22sp" android:textStyle="bold" /> </LinearLayout> <TableLayout android:id="@+id/menuBottom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/colorPrimary" android:padding="10.0dip" android:stretchColumns="*" android:visibility="visible"> <TableRow> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <ImageView android:id="@+id/mailButton" android:layout_width="52dp" android:layout_height="52dp" android:background="@drawable/selector_shareimage" android:contentDescription="@string/app_name" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <ImageView android:id="@+id/shareButton" android:layout_width="52dp" android:layout_height="52dp" android:background="@drawable/selector_shareimage_small" android:contentDescription="@string/app_name" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal"> <ImageView android:id="@+id/delButton" android:layout_width="52dp" android:layout_height="52dp" android:background="@drawable/selector_delete" android:contentDescription="@string/app_name" /> </LinearLayout> </TableRow> </TableLayout> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/menuTop" android:layout_centerHorizontal="true" android:visibility="gone" ads:adSize="BANNER" ads:adUnitId="@string/banner_id"></com.google.android.gms.ads.AdView>
Add your own Drawable to Selector class,and create it res>drawable>selector_shareimage.xml
<?xml version="1.0" encoding="utf-8"?>
<item android:drawable="@drawable/result_bt_mail" android:state_enabled="true" android:state_pressed="true"/> <item android:drawable="@drawable/result_bt_mail" android:state_enabled="true" android:state_focused="true"/> <item android:drawable="@drawable/result_bt_mail" android:state_enabled="true" android:state_selected="true"/> <item android:drawable="@drawable/result_bt_mail_s"/>

Dont forget to add in application tag for sdk version 29 and 30
to add this line
android:requestLegacyExternalStorage="true"
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:requestLegacyExternalStorage="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">