Show Image View from file path?

前端 未结 13 730
眼角桃花
眼角桃花 2020-11-22 11:18

I need to show an image by using the file name only, not from the resource id.

ImageView imgView = new ImageView(this);
imgView.setBackgroundResource(R.drawa         


        
13条回答
  •  抹茶落季
    2020-11-22 11:26

    How To Show Images From Folder path in Android

    Very First: Make Sure You Have Add Permissions into Mainfest file:

     
    
    

    :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 photo = new ArrayList();
        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();
                new MyGalleryAsy().execute();
                ImageDetail.deleted = false;
            }
    
        }
    
        public class MyGalleryAsy extends AsyncTask {
            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 newItemList) {
                photo = newItemList;
                notifyDataSetChanged();
            }
        }
    
    
    }
    

    Now create its Xml Class

    
    
    
    
        
    
        
    
    
    
    
    
    
    
    ## Also Make Adapter galleryadapter.xml ##
    
    
    [![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[]{"mymail@email.com", "",};
                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[]{"mymail@email.com", "",};
                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

    
    
    
    
    
    
    
    
        
    
    
    
    
        
    
            
    
                
            
    
            
    
                
            
    
            
    
                
            
        
    
    
    
    

    Add your own Drawable to Selector class,and create it res>drawable>selector_shareimage.xml

    
    
    
    
    
    
    

    Dont forget to add in application tag for sdk version 29 and 30 to add this line

    android:requestLegacyExternalStorage="true"

     
    

提交回复
热议问题