안드로이드 개발 질문/답변
(글 수 45,052)
ImageDownloader를 이용하여 서버에서 이미지를 다운받아서 표시하는 기능까지는 구현을 하였는데,
로컬(sdcard)에 있는 이미지를 어떻게 구현을 하여야 하는지 감이 잡히질 않네요...
AsyncTask나 WeakReference를 이용하면 가능하다던데.
개념이 잡혀있질 않네요..
간단한 조언이라도 해주시면 감사하겠습니다 ㅠㅠ
로컬(sdcard)에 있는 이미지를 어떻게 구현을 하여야 하는지 감이 잡히질 않네요...
AsyncTask나 WeakReference를 이용하면 가능하다던데.
개념이 잡혀있질 않네요..
간단한 조언이라도 해주시면 감사하겠습니다 ㅠㅠ
2011.01.18 17:09:25
답글 감사드립니다^^
로딩 시 가장 처음에는 기본이미지를 보여주고, 그 뒤에 로딩이 끝나면 원본이미지로 순차적으로 교체해주는 방식에 대한 질문입니다.
2011.01.18 18:01:50
저도 처음 시도 하는 거라... 한번 만들어 보았습니다. 그런데, 제 예상되로 SDCARD에 이미지를 넣으면 비동기로딩을 해도 별 효과가 없네요. 이미지를 많이 넣으면 될려나 모르겠지만.
onCreate()
ImageTask
onCreate()
ImageTask task = new ImageTask(image);
task.execute("/sdcard/패스");
or
ImageTask task = new ImageTask(image);
task.execute("http://주소");
ImageTask
public class ImageTask extends AsyncTask<String, Integer, Drawable> {
private ImageView view;
public ImageTask(ImageView v) {
view = v;
}
public Drawable downloadImage(String uri) {
URL url = null;
try {
url = new URL(uri);
InputStream is = url.openStream();
Drawable draw = Drawable.createFromStream(is, "");
// view.setTag(url.toExternalForm());
is.close();
return draw;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public Drawable loadImage(String path) {
try {
InputStream is = new FileInputStream(path);
Drawable draw = Drawable.createFromStream(is, "");
// view.setTag(url.toExternalForm());
is.close();
return draw;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 独自スレッドでバックグラウンド処理
* @param result
*/
protected Drawable doInBackground(String... uri) {
String regex = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
Pattern patt = Pattern.compile(regex);
Matcher matcher = patt.matcher(uri[0]);
if (matcher.matches()) {
return downloadImage(uri[0]);
} else {
return loadImage(uri[0]);
}
}
/**
* 画面描画できるmainスレッドで実行したい処理
*/
protected void onPostExecute(Drawable draw) {
view.setImageDrawable(draw);
}
}




ImageView image = new ImageView(context); image.setImageURI(Uri.parse("/sdcard/image.jpg"));이걸 말씀하시는지...