반응형
[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.os.NetworkOnMainThreadException 에러, Thread를 사용해야 되는 경우 (1) | 2022.08.02 |
---|---|
안드로이드(Android) ImageView 에 이미지 회전(Image rotate) 시켜서 세팅하는 방법 (1) | 2022.07.31 |
안드로이드 개발 No cached version available for offline mode 에러 해결하기 (0) | 2022.07.19 |
안드로이드 개발 Fragment 생명 주기는 어떻게 되는가? (0) | 2022.06.20 |
안드로이드(Android) 라이브러리 프로젝트 참조 만들기 (0) | 2020.06.23 |
안드로이드(Android) Thread 대신해서 AsyncTask 클래스 구현하기 (0) | 2020.06.16 |
안드로이드 Android 앱 배포를 위한 개발자 등록하기 (0) | 2020.05.01 |
안드로이드 개발 중복 리소스가 나타나서 에러가 발생하는 경우 Multiple implementations resource (0) | 2020.04.08 |