Please Enable JavaScript!
Gon[ Enable JavaScript ]

[Android] 안드로이드 인터넷 이미지 다운로드 해서 ImageView 표현하기

 

환경 : Eclipse Mars, Android 4.2.2

 

안드로이드에서 웹페이지에 있는 이미지를 다운로드해서 표현하는 방법에 대해 알아 보겠습니다. 네트워크를 통한 다운로드이기 때문에 AsyncTask 클래스나 Thread 를 이용해야 합니다. 다운로드후 ImageView 에 표현하였습니다.

 

 

onCreate() 함수에서 버튼 클릭시 이미지를 다운로드 할수 있는 URL LoadImage 객체로 넘깁니다. 이렇게 전달받은 이미지주소를 URL 객체 생성시 인수로 넘기 시면 됩니다. 그리고 URL 클래스의 getContent() 함수를 이용해서 스트림 객체를 리턴 받습니다. 받은 스트림 객체를 BitmapFactory.decodeStream() 으로 이미지 변환합니다.

try {
	mBitmap = BitmapFactory
			.decodeStream((InputStream) new URL(args[0]).getContent());

} catch (Exception e) {
	e.printStackTrace();
}

 

▼ 이미지를 다운로드 할때는 AsyncTask 를 이용했습니다. 이미지 크기가 얼마나 될지 모르기 때문에 별도의 Thread 가 필요합니다. doInBackground() 함수에서 이미지를 다운받고 Bitmap 으로 변환한뒤 리턴합니다. 그럼 onPostExecute() 함수에서 Bitmap을 받아 ImageView 위젯에 표현합니다.

private class LoadImage extends AsyncTask<String, String, Bitmap> {

	ProgressDialog pDialog;

	@Override
	protected void onPreExecute() {
		super.onPreExecute();
		pDialog = new ProgressDialog(ImageUrlDown.this);
		pDialog.setMessage("이미지 로딩중입니다...");
		pDialog.show();
	}

	protected Bitmap doInBackground(String... args) {
		try {
			mBitmap = BitmapFactory
					.decodeStream((InputStream) new URL(args[0])
							.getContent());

		} catch (Exception e) {
			e.printStackTrace();
		}
		return mBitmap;
	}

	protected void onPostExecute(Bitmap image) {

		if (image != null) {
			mImgTrans.setImageBitmap(image);
			pDialog.dismiss();

		} else {
			pDialog.dismiss();
			Toast.makeText(ImageUrlDown.this, "이미지가 존재하지 않습니다.",
					Toast.LENGTH_SHORT).show();

		}
	}
}

 

▼ 아래는 웹상에서 이미지를 다운로드 하는 Activity 의 전체 소스 입니다.

import java.io.InputStream;
import java.net.URL;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.sampleandroidinfo.R;

public class ImageUrlDown extends Activity {
	Button mDown;
	ImageView mImgTrans;
	Bitmap mBitmap;

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_image_url_down);
		mDown = (Button) findViewById(R.id.btn_down);
		mImgTrans = (ImageView) findViewById(R.id.imgTranslate);

		mDown.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				new LoadImage()
		.execute("https://t1.daumcdn.net/cfile/tistory/212DAC4C553978792D");

			}
		});
	}

	private class LoadImage extends AsyncTask<String, String, Bitmap> {

		ProgressDialog pDialog;

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			pDialog = new ProgressDialog(ImageUrlDown.this);
			pDialog.setMessage("이미지 로딩중입니다...");
			pDialog.show();
		}

		protected Bitmap doInBackground(String... args) {
			try {
				mBitmap = BitmapFactory
						.decodeStream((InputStream) new URL(args[0])
								.getContent());

			} catch (Exception e) {
				e.printStackTrace();
			}
			return mBitmap;
		}

		protected void onPostExecute(Bitmap image) {

			if (image != null) {
				mImgTrans.setImageBitmap(image);
				pDialog.dismiss();

			} else {
				pDialog.dismiss();
				Toast.makeText(ImageUrlDown.this, "이미지가 존재하지 않습니다.",
						Toast.LENGTH_SHORT).show();

			}
		}
	}
}

 

▼ 메인 Activity 의 전체 화면 레이아웃 XML 입니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#3F0099"
        android:gravity="center"
        android:paddingBottom="@dimen/abc_action_bar_icon_vertical_padding"
        android:paddingTop="@dimen/abc_action_bar_icon_vertical_padding"
        android:text="웹에 있는 이미지 다운로드 하는 방법"
        android:textColor="#FFFFFF" />
    
    <Button
        android:id="@+id/btn_down"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Image 다운로드 시작" />
    
    <ImageView
        android:id="@+id/imgTranslate"
        android:layout_width="500px"
        android:layout_height="500px"
        android:layout_gravity="center"/>
 
</LinearLayout>

 

[Android] 안드로이드 인터넷 이미지 다운로드 해서 ImageView 표현하기

Posted by 녹두장군

댓글을 달아 주세요

  1. boolks 2016.10.09 22:02  댓글주소  수정/삭제  댓글쓰기

    잘봤습니다 막혔던 부분인데 감사드립니다!
    근데 혹시 이미지를 2개 이상 추가하고싶을 때는 어떤 방식으로 접근하면 되나요?
    ImageView mImgTrans; 부분에서 이미지뷰를 여러개 만들어야 하는건가요...?
    onPostExecute 부분도 건드려야 할 것 같은데 접근 방법을 모르겠네요...

  2. 릿드 2020.07.26 11:57  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 덕분에 이미지 표시에 성공했습니다^^
    초보자들을 위해서 AndroidManifest.xml에 권한 추가하는 내용도 본문에 추가하면 더 좋을 것 같습니다^^