'샘플소스'에 해당되는 글 1건

  1. 2012.01.19 #Android 이미지 다운로드
Android2012. 1. 19. 17:19


 어제 게시했던 소스를 확장하여 웹에서 이미지파일을 다운로드하여 화면에 뿌려주기까지 해보았습니다. 
여기에 추가된 부분은 다운로드 혹은 파일을 처리 중일땐 ProgressBar를 이용해서 사용자에게 알려주고 처리가 다 끝나면 서서히 화면에 나타나게끔 애니메이션을 넣었습니다.
 파일을 읽어 올때 지정된 캐쉬폴더에 파일이 있으면 우선 사용하게끔 하였고 없다면 다운로드 받게끔 처리했습니다.
 하단에 [모든 이미지 삭제] 버튼을 추가해서 다운로드 된 파일들을 삭제가 가능하게끔 구현하였구요!
주요 메소드와 프로젝트 파일을 올립니다. 소스에 나와있는 웹url은 구글 사이트도구를 사용하였고 간혹가다 다운로드가 안될 수 도 있으니 테스트하실때 안되면 다른 웹url에 있는 이미지파일을 지정해서 불러오시면 될것같네요. 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
    /**
     * 이미지뷰에 사용될 Bitmap 설정
     * @param fileName 가져와야 하는 파일명 
     */
	public void setImageBitmap(final String fileName) {
		mBitmap = null;
		mSpinner.setVisibility(View.VISIBLE);
		mImage.setVisibility(View.INVISIBLE);
		new Thread(){
			public void run() {
				try {
					//우선 장치에 저장되어 있는 파일을 읽어오려고 시도
					mBitmap = getBitmapResource(CACHE_FOLDER+fileName);
					if(mBitmap == null){//비트맵이 null이면 장치에서 읽어온 값이 없음.
						//다운로드 시작
						mBitmap = getBitmapResource(getDownloadFromUrl(fileName));
					}//null이 아니면 장치의 값을 읽어옴
					
					downloadHandler.sendEmptyMessage(DOWNLOAD_SUCCESS);
				} catch (Exception e) {
					Log.e("Download Failure","msg : "+e);
					downloadHandler.sendEmptyMessage(DOWNLOAD_FAILURE);
				}
			};
		}.start();
	}
	
	/**
	 * 핸들러
	 */
	Handler downloadHandler = new Handler(new Callback() {
		@Override
		public boolean handleMessage(Message msg) {
			switch (msg.what) {
			case DOWNLOAD_SUCCESS:
				mImage.setImageBitmap(mBitmap);
				mImage.setVisibility(View.VISIBLE);
				mSpinner.setVisibility(View.INVISIBLE);
				
				//다운받은 이미지가 서서히 나타나는 anim
				Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.anim_type_image_alpha);
		    	mImage.startAnimation(anim);
				break;
			case DOWNLOAD_FAILURE:
				Toast.makeText(mContext, "이미지 다운로드 실패!", Toast.LENGTH_SHORT).show();
				mSpinner.setVisibility(View.INVISIBLE);
				mImage.setVisibility(View.INVISIBLE);
				break;
			}
			return true;
		}		
	});

어제 게시했던 메소드에 추가된 메소드중 주요 메소드는 위와 같습니다.
Thread를 이용해 처음엔 캐쉬폴더에서 파일을 불러오기 시도한 다음 그 값이 null이면 다운로드 받기 시작하고 결과를 Handler로 전달해주며 Handler에서 다운로드 성공/실패일때 구분하여 처리해 주었구요.
레이아웃 xml에선 ImageView와 ProgressBar의 크기와 위치를 동일하게 하여 visible과 invisible을 이용하였습니다.
 
 anim/anim_type_image_alpha.xml
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android">
 
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="1000" />
</set>

추가된 애니메이션 파일입니다.
마켓에서 리스트뷰형태로 항목이 나오면서 이미지들을 뿌려줄때 효과를 보니 이런 효과더라구요!
다른 애니메이션 효과를 줘도 멋질것같네요 ㅎㅎ

프로젝트 파일 첨부합니다.

 
Posted by ™설야