Load image from url

前端 未结 16 1988
独厮守ぢ
独厮守ぢ 2020-11-22 05:12

I have an image URL. I want to display an image from this URL in an ImageView but I am unable to do that.

How can this be achieved?

相关标签:
16条回答
  • 2020-11-22 05:34

    Based on this answer i write my own loader.

    With Loading effect and Appear effect :

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.AsyncTask;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.animation.AlphaAnimation;
    import android.view.animation.Animation;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    
    import java.io.InputStream;
    
    /**
     * Created by Sergey Shustikov (pandarium.shustikov@gmail.com) at 2015.
     */
    public class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
    {
        public static final int ANIMATION_DURATION = 250;
        private final ImageView mDestination, mFakeForError;
        private final String mUrl;
        private final ProgressBar mProgressBar;
        private Animation.AnimationListener mOutAnimationListener = new Animation.AnimationListener()
        {
            @Override
            public void onAnimationStart(Animation animation)
            {
    
            }
    
            @Override
            public void onAnimationEnd(Animation animation)
            {
                mProgressBar.setVisibility(View.GONE);
            }
    
            @Override
            public void onAnimationRepeat(Animation animation)
            {
    
            }
        };
        private Animation.AnimationListener mInAnimationListener = new Animation.AnimationListener()
        {
            @Override
            public void onAnimationStart(Animation animation)
            {
                if (isBitmapSet)
                    mDestination.setVisibility(View.VISIBLE);
                else
                    mFakeForError.setVisibility(View.VISIBLE);
            }
    
            @Override
            public void onAnimationEnd(Animation animation)
            {
    
            }
    
            @Override
            public void onAnimationRepeat(Animation animation)
            {
    
            }
        };
        private boolean isBitmapSet;
    
        public DownloadImageTask(Context context, ImageView destination, String url)
        {
            mDestination = destination;
            mUrl = url;
            ViewGroup parent = (ViewGroup) destination.getParent();
            mFakeForError = new ImageView(context);
            destination.setVisibility(View.GONE);
            FrameLayout layout = new FrameLayout(context);
            mProgressBar = new ProgressBar(context);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            params.gravity = Gravity.CENTER;
            mProgressBar.setLayoutParams(params);
            FrameLayout.LayoutParams copy = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            copy.gravity = Gravity.CENTER;
            copy.width = dpToPx(48);
            copy.height = dpToPx(48);
            mFakeForError.setLayoutParams(copy);
            mFakeForError.setVisibility(View.GONE);
            mFakeForError.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
            layout.addView(mProgressBar);
            layout.addView(mFakeForError);
            mProgressBar.setIndeterminate(true);
            parent.addView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        }
    
        protected Bitmap doInBackground(String... urls)
        {
            String urlDisplay = mUrl;
            Bitmap bitmap = null;
            try {
                InputStream in = new java.net.URL(urlDisplay).openStream();
                bitmap = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return bitmap;
        }
    
        protected void onPostExecute(Bitmap result)
        {
            AlphaAnimation in = new AlphaAnimation(0f, 1f);
            AlphaAnimation out = new AlphaAnimation(1f, 0f);
            in.setDuration(ANIMATION_DURATION * 2);
            out.setDuration(ANIMATION_DURATION);
            out.setAnimationListener(mOutAnimationListener);
            in.setAnimationListener(mInAnimationListener);
            in.setStartOffset(ANIMATION_DURATION);
            if (result != null) {
                mDestination.setImageBitmap(result);
                isBitmapSet = true;
                mDestination.startAnimation(in);
            } else {
                mFakeForError.startAnimation(in);
            }
            mProgressBar.startAnimation(out);
        }
        public int dpToPx(int dp) {
            DisplayMetrics displayMetrics = mDestination.getContext().getResources().getDisplayMetrics();
            int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
            return px;
        }
    }
    

    Add permission

    <uses-permission android:name="android.permission.INTERNET"/>
    

    And execute :

     new DownloadImageTask(context, imageViewToLoad, urlToImage).execute();
    
    0 讨论(0)
  • 2020-11-22 05:35

    The code below show you how to set ImageView from a url string, using RxAndroid. First, add RxAndroid library 2.0

    dependencies {
        // RxAndroid
        compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
        compile 'io.reactivex.rxjava2:rxjava:2.0.0'
    
        // Utilities
        compile 'org.apache.commons:commons-lang3:3.5'
    
    }
    

    now use setImageFromUrl to set image.

    public void setImageFromUrl(final ImageView imageView, final String urlString) {
    
        Observable.just(urlString)
            .filter(new Predicate<String>() {
                @Override public boolean test(String url) throws Exception {
                    return StringUtils.isNotBlank(url);
                }
            })
            .map(new Function<String, Drawable>() {
                @Override public Drawable apply(String s) throws Exception {
                    URL url = null;
                    try {
                        url = new URL(s);
                        return Drawable.createFromStream((InputStream) url.getContent(), "profile");
                    } catch (final IOException ex) {
                        return null;
                    }
                }
            })
            .filter(new Predicate<Drawable>() {
                @Override public boolean test(Drawable drawable) throws Exception {
                    return drawable != null;
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Drawable>() {
                @Override public void accept(Drawable drawable) throws Exception {
                    imageView.setImageDrawable(drawable);
                }
            });
    }
    
    0 讨论(0)
  • 2020-11-22 05:35
    loadImage("http://relinjose.com/directory/filename.png");
    

    Here you go

    void loadImage(String image_location) {
        URL imageURL = null;
        if (image_location != null) {
            try {
                imageURL = new URL(image_location);         
                HttpURLConnection connection = (HttpURLConnection) imageURL
                        .openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream inputStream = connection.getInputStream();
                bitmap = BitmapFactory.decodeStream(inputStream);// Convert to bitmap
                ivdpfirst.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            //set any default
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:36
    public class MainActivity extends Activity {
    
        Bitmap b;
        ImageView img;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img = (ImageView)findViewById(R.id.imageView1);
            information info = new information();
            info.execute("");
        }
    
        public class information extends AsyncTask<String, String, String>
        {
            @Override
            protected String doInBackground(String... arg0) {
    
                try
                {
                    URL url = new URL("http://10.119.120.10:80/img.jpg");
                    InputStream is = new BufferedInputStream(url.openStream());
                    b = BitmapFactory.decodeStream(is);
    
                } catch(Exception e){}
                return null;
            }
    
            @Override
            protected void onPostExecute(String result) {
                img.setImageBitmap(b);
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:41

    Try this add picasso lib jar file

    Picasso.with(context)
                    .load(ImageURL)
                    .resize(width,height).noFade().into(imageView);
    
    0 讨论(0)
  • 2020-11-22 05:43

    try picassso nice and finishes in one statement

    Picasso.with(context)
                    .load(ImageURL)
                    .resize(width,height).into(imageView);
    

    tutorial: https://youtu.be/DxRqxsEPc2s

    0 讨论(0)
提交回复
热议问题