Android에서 URL로 ImageView를로드하는 방법은 무엇입니까? [닫은]

에서 URL이 참조하는 이미지를 어떻게 사용 ImageView합니까?



답변

에서 안드로이드 개발자 :

// show The Image in a ImageView
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
            .execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");

public void onClick(View v) {
    startActivity(new Intent(this, IndexActivity.class));
    finish();

}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

AndroidManifest.xml인터넷에 액세스 할 수 있도록 다음 권한이 설정되어 있는지 확인하십시오 .

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


답변

1. Picasso 는 응용 프로그램에서 번거롭지 않은 이미지 로딩을 허용합니다. 종종 한 줄의 코드로도 가능합니다!

Gradle 사용 :

implementation 'com.squareup.picasso:picasso:2.71828'

한 줄의 코드 만!

Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);

2. 글라이드 부드러운 스크롤링에 중점을 둔 Android 용 이미지 로딩 및 캐싱 라이브러리

Gradle 사용 :

repositories {
  mavenCentral()
  google()
}

dependencies {
   implementation 'com.github.bumptech.glide:glide:4.7.1'
   annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
}

// 간단한보기 :

  Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);

삼. 프레스코 는 안드로이드 응용 프로그램에서 이미지를 표시하는 강력한 시스템입니다.

Fresco 시작하기


답변

먼저 이미지를 다운로드해야합니다

public static Bitmap loadBitmap(String url) {
    Bitmap bitmap = null;
    InputStream in = null;
    BufferedOutputStream out = null;

    try {
        in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE);

        final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
        out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
        copy(in, out);
        out.flush();

        final byte[] data = dataStream.toByteArray();
        BitmapFactory.Options options = new BitmapFactory.Options();
        //options.inSampleSize = 1;

        bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options);
    } catch (IOException e) {
        Log.e(TAG, "Could not load Bitmap from: " + url);
    } finally {
        closeStream(in);
        closeStream(out);
    }

    return bitmap;
}

그런 다음 Imageview.setImageBitmap을 사용하여 비트 맵을 ImageView로 설정하십시오.


답변

나는 다양한 프로젝트에서 되풀이되는 요구 인 것처럼 이것을 처리하기 위해 수업을 썼습니다.

https://github.com/koush/UrlImageViewHelper

UrlImageViewHelper는 URL에서 찾은 이미지로 ImageView를 채 웁니다.

샘플은 Google 이미지 검색을 수행하고 결과를 비동기 적으로로드 / 표시합니다.

UrlImageViewHelper는 BitmapDrawables의 모든 이미지 URL을 자동으로 다운로드, 저장 및 캐시합니다. 중복 된 URL은 메모리에 두 번로드되지 않습니다. 비트 맵 메모리는 약한 참조 해시 테이블을 사용하여 관리되므로 이미지를 더 이상 사용하지 않으면 자동으로 가비지 수집됩니다.


답변

어쨌든 사람들은 내 의견을 답변으로 게시하도록 요청합니다. 게시 중입니다.

URL newurl = new URL(photo_url_str);
mIcon_val = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
profile_photo.setImageBitmap(mIcon_val);


답변

위의 대답은 버튼 클릭을 기준으로 이미지를로드하는 경우 유용하지만 새로운 활동에서 이미지를로드하면 UI가 1-2 초 동안 정지됩니다. 주변을 둘러 보면 간단한 비동기 작업 으로이 문제가 해결되었습니다.

비동기 작업을 사용하려면 활동이 끝날 때이 클래스를 추가하십시오.

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

그리고 다음을 사용하여 onCreate () 메소드에서 호출하십시오.

new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
        .execute(MY_URL_STRING);

결과적으로 빠르게로드되는 활동과 사용자의 네트워크 속도에 따라 잠시 후에 표시되는 이미지보기가 생성됩니다.


답변

이 LoadingImageView보기를 사용하여 URL에서 이미지를로드 할 수도 있습니다.

http://blog.blundellapps.com/imageview-with-loading-spinner/

해당 링크에서 클래스 파일을 추가하면 URL 이미지보기를 인스턴스화 할 수 있습니다.

xml에서 :

<com.blundell.tut.LoaderImageView
  android:id="@+id/loaderImageView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  image="http://developer.android.com/images/dialog_buttons.png"
 />

코드에서 :

final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png");

다음을 사용하여 업데이트하십시오.

image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png");