웹주소에 있는 이미지를 View에 불러와보자.
 예제로 쓸 주소는 http://cfs.see.daum.net/files/admin/20090113/20090113_092517_best_dormitory_090113.jpg 이걸로 하겠다.

 xml UI 설정을 나는 다음과 같이 기술했다.(아래소스는 일부분이다.)
main.xml
<ImageView android:id="@+id/thumnail"
   android:src="@drawable/dog"
   android:background="@drawable/blue"
   android:adjustViewBounds="true"
   android:scaleType="fitXY"
   android:layout_width="70dip"
   android:layout_height="70dip" />

 로컬에 있는 이미지를 불러오는 방법은 android:src="@drawable/dog" 와 같이 android:src 파라미터에 리소스 파일명을 직접 쓰면 된다. 잘 안되는 점이 있다면 R.java 파일에 Drawable 클래스에 자동 등록된 id를 확인해보자.
 덧붙여 간단히 다른 파라미터 설명을 곁들이자면  android:background 파라미터 값은 직접 RGB코드를 넣어도 되고 color 정보를 따로 한곳에 담은 xml에 등록된 아이디로 해도 된다. 필자는 후자 방법으로 한것이다.
 android:adjustViewBounds 은 그려질 이미지의 비율을 유지한다는 의미같다. android:scaleType 은 이미지가 보여질 리사이징 정보인데 필자는 고정으로 정했다. 그러면 위의 파라미터와 상충되는 것 같은데 확인되는 대로 관련들을 포스팅하도록 하겠다.
자세한 내용은 아래 레퍼런스를 참고바란다.
http://code.google.com/intl/ko-KR/android/reference/android/widget/ImageView.html

이제 UI설정을 다 되었다. 나타내고자 하는 Activity 내에서
다음과 같이 호출을 해보자
Uri uri = Uri.parse("http://cfs.see.daum.net/files/admin/20090113/20090113_092517_best_dormitory_090113.jpg");
mThumnail = (ImageView)findViewById(R.id.thumnail);
setImageURI(Uri uri)
findViewById 나 setImageURI 관련해서 자세한 사항은 레퍼런스 참고하길 바란다.
간단히 설명하자면 리소스중 thumnail 이란 id를 가진 ImageView영역에 위의 uri를 가진 이미지를 나타낼 목적이다. 
실행해보자. DDMS를 통해 로그를 보면 에러가 난다;; (혹시 나지 않는 분들은 말씀주시길.. ) 
01-14 01:56:44.274: INFO/System.out(430): resolveUri failed on bad bitmap uri: http://cfs.see.daum.net/files/admin/20090113/20090113_092517_best_dormitory_090113.jpg

간단히 될줄 알았는데 좀 더 구글링 해보니 일반 java 프로그래밍 방법과 비슷한 식이 있었다.
 try {
            URL url = new
            URLConnection conn = url.openConnection();
            conn.connect();
            BufferedInputStream bis = new
BufferedInputStream(conn.getInputStream());
            Bitmap bm = BitmapFactory.decodeStream(bis);
            bis.close();
            mThumnail.setImageBitmap(bm);
        } catch (IOException e) { 
            Log.e(Constants.LOGTAG, " " + CLASSTAG, e);
        }
소스를 보면 알겠지만 소켓 통신으로 이미지를 다운받은후 그 비트맵을 세팅하는 방식이다. 혹시 여기서도 아래와 같은 DDMS상에 에러로그가 발생했다면 설정을 더 해주어야 할것이있다.(단, 에뮬레이터에서 브라우저에 웹페이지 로딩이 이상이 없다는 전제이다.)
01-14 02:03:26.083: ERROR/OSNetworkSystem(466): unknown socket error -1

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
듣자하니 위 설정이 소켓통신을 허용해는 설정이란다;;; 일부러 막을 필요가 있었나보다;;

지금까지 웹주소로 이미지 나타내기를 해보았다.
궁금 한점이 생겼다. 인터넷이 끊어졌을때 이미지를 로컬파일과 같이 저장해놓을 수는 없을까? 아니면 알아서 템포러리로 저장되는건가?



Posted by 빈솔B
,