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
,