Show Image View from file path?

前端 未结 13 726
眼角桃花
眼角桃花 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:25

    All the answers are outdated. It is best to use picasso for such purposes. It has a lot of features including background image processing.

    Did I mention it is super easy to use:

    Picasso.with(context).load(new File(...)).into(imageView);
    
    0 讨论(0)
  • 2020-11-22 11:25

    From the official site: http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

    ImageView image = (ImageView) findViewById(R.id.imagePreview);           
    try {
        image.setImageBitmap(decodeSampledBitmap(picFilename));
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    Here the methods:

        private int calculateInSampleSize(
                BitmapFactory.Options options, int reqWidth, int reqHeight) {
            // Raw height and width of image
            final int height = options.outHeight;
            final int width = options.outWidth;
            int inSampleSize = 1;
    
            if (height > reqHeight || width > reqWidth) {
    
                final int halfHeight = height / 2;
                final int halfWidth = width / 2;
    
                // Calculate the largest inSampleSize value that is a power of 2 and keeps both
                // height and width larger than the requested height and width.
                while ((halfHeight / inSampleSize) > reqHeight
                        && (halfWidth / inSampleSize) > reqWidth) {
                    inSampleSize *= 2;
                }
            }
    
            return inSampleSize;
        }
    
        private Bitmap decodeSampledBitmap(String pathName,
                int reqWidth, int reqHeight) {
    
            // First decode with inJustDecodeBounds=true to check dimensions
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(pathName, options);
    
            // Calculate inSampleSize
            options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
    
            // Decode bitmap with inSampleSize set
            options.inJustDecodeBounds = false;
            return BitmapFactory.decodeFile(pathName, options);
        }
    
    //I added this to have a good approximation of the screen size: 
        private Bitmap decodeSampledBitmap(String pathName) {
            Display display = getWindowManager().getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            int width = size.x;
            int height = size.y;
            return decodeSampledBitmap(pathName, width, height);
        }   
    
    0 讨论(0)
  • 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:

     <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[]{"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

    <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">
    
    0 讨论(0)
  • 2020-11-22 11:27

    I think you can use this

    Bitmap bmImg = BitmapFactory.decodeFile("path of your img1");
    imageView.setImageBitmap(bmImg);
    
    0 讨论(0)
  • 2020-11-22 11:29

    You can also use:

    
    
        File imgFile = new  File(“filepath”);
        if(imgFile.exists())
        {
            ImageView myImage = new ImageView(this);
            myImage.setImageURI(Uri.fromFile(imgFile));
    
        }
    
    

    This does the bitmap decoding implicit for you.

    0 讨论(0)
  • 2020-11-22 11:32
    String path = Environment.getExternalStorageDirectory()+ "/Images/test.jpg";
    
    File imgFile = new File(path);
    if(imgFile.exists())
    {
       Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
       ImageView imageView=(ImageView)findViewById(R.id.imageView);
      imageView.setImageBitmap(myBitmap);
    }
    
    0 讨论(0)
提交回复
热议问题