[Android/안드로이드] Simple Gallery. ( 겔러리 앱 )
*창*
다운로드
장바구니
소개글
안드로이드 Simple Fast Gallery( 간단하고 빠른 겔러리 앱 ) 입니다.먼저 스크린샷을 기준으로 설명하겠습니다.
기본 layout은 상단은 preview 이미지, 하단은 list 입니다.
좌측은 Folder view 로 SD card 에 있는 모든 이미지 폴더들을 표시합니다.
폴더의 context 를 고려하여 노란색으로 세팅하였습니다. 물론 색깔은 쉽게 바꿀 수 있습니다.
Folder 를 클릭하여 들어가면 오른쪽 화면처럼 File view 가 나옵니다.
FileView 에서 해당 file 을 클릭하면 preview 가 상단에 표시됩니다.
간단해 보이지만, 세심한 배려가 많이 들어간 앱입니다.
먼저 최초 folder data 를 준비하는 동안 Progress dialog 가 나와서 유저가 현재 data 가 준비중이라는 것을 알 수 있습니다. ( 제 SD card 사진 1000장 넘지만 1초도 안 걸립니다. )
최대한 빠른 속도를 위해서, Folder view 와 File view 를 한 Activity 에서 다룹니다.
따라서 전환에 delay 가 없이 매우 빠릅니다.
이미지의 decode 부분이 핵심인데요.
이미지의 decode 하는 도중에 UI 를 block 하지 않기 위해서 ( 버벅댐을 방지하기 위해서 ) decode 를
다른 thread 로 돌립니다.
용량이 큰 이미지의 경우 OutOfMemory Error 가 발생하는데, 이를 방지하는 코드도 들어가 있고,
이미지 사이즈가 매우 큰 경우 화면 표시를 할 수 없는데, 이를 대처하는 코드도 들어가 있어, 파일 하나가 100M 이상 되는 극악의 경우들을 제외하고는 모두 decoding 됩니다.
이름이 Simple Gallery 인만큼, 사용성과 속도에 초점을 두었습니다.
안드로이드 기본 갤러리보다 디코딩 속도가 더 빠릅니다.
코드는 리펙토링 되어 있어서 쉽게 읽을 수 있으며, 헷갈릴 수 있는 부분은 모두 주석을 달아 놓았습니다.
해당 앱은 Ginger Bread(진저브레드) SDK 로 작성했지만, ICS, Froyo 모두 테스트를 완료하였습니다.
안드로이드 어플리케이션 개발 과목에서, 속도와 기술면에서 인정받아 9.8/10 획득하였습니다.
이클립스에서 프로그램을 로드하신 후에는 F5를 통해 프로젝트를 refresh 해주시고,
[Project] - [Clean] 을 통해 rebuild 작업을 거쳐주셔야 R 관련된 에러가 사라져 정상적으로 이용하실 수 있습니다.
컴파일 실행환경
Android SDK / JDK압축파일 내 파일목록
SimpleFastGallery/
SimpleFastGallery/.classpath
SimpleFastGallery/.project
SimpleFastGallery/.settings/
SimpleFastGallery/.settings/org.eclipse.jdt.core.prefs
SimpleFastGallery/AndroidManifest.xml
SimpleFastGallery/assets/
SimpleFastGallery/bin/
SimpleFastGallery/bin/classes/
SimpleFastGallery/bin/classes.dex
SimpleFastGallery/bin/classes/com/
SimpleFastGallery/bin/classes/com/sklee/
SimpleFastGallery/bin/classes/com/sklee/simplegallery/
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$attr.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$drawable.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$id.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$layout.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$string.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity$1.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity$2.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity$PREVIEW_MODE.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/BitmapDecoder$OnImageDecodeFinishListener.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/BitmapDecoder$RequestChangedException.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/BitmapDecoder.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/ProgressDialogUtil$1.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/ProgressDialogUtil.class
SimpleFastGallery/bin/res/
SimpleFastGallery/bin/resources.ap_
SimpleFastGallery/bin/res/drawable-hdpi/
SimpleFastGallery/bin/res/drawable-ldpi/
SimpleFastGallery/bin/res/drawable-mdpi/
SimpleFastGallery/bin/SimpleFastGallery.apk
SimpleFastGallery/gen/
SimpleFastGallery/gen/com/
SimpleFastGallery/gen/com/sklee/
SimpleFastGallery/gen/com/sklee/simplegallery/
SimpleFastGallery/gen/com/sklee/simplegallery/R.java
SimpleFastGallery/proguard.cfg
SimpleFastGallery/project.properties
SimpleFastGallery/res/
SimpleFastGallery/res/drawable-hdpi/
SimpleFastGallery/res/drawable-hdpi/gallery_icon.jpg
SimpleFastGallery/res/drawable-ldpi/
SimpleFastGallery/res/drawable-ldpi/gallery_icon.jpg
SimpleFastGallery/res/drawable-mdpi/
SimpleFastGallery/res/drawable-mdpi/gallery_icon.jpg
SimpleFastGallery/res/layout/
SimpleFastGallery/res/layout/file_list_item.xml
SimpleFastGallery/res/layout/folder_list_item.xml
SimpleFastGallery/res/layout/main.xml
SimpleFastGallery/res/layout/main2.xml
SimpleFastGallery/res/values/
SimpleFastGallery/res/values/strings.xml
SimpleFastGallery/src/
SimpleFastGallery/src/com/
SimpleFastGallery/src/com/sklee/
SimpleFastGallery/src/com/sklee/simplegallery/
SimpleFastGallery/src/com/sklee/simplegallery/SimpleFastGalleryActivity.java
SimpleFastGallery/src/com/sklee/simplegallery/utils/
SimpleFastGallery/src/com/sklee/simplegallery/utils/BitmapDecoder.java
SimpleFastGallery/src/com/sklee/simplegallery/utils/ProgressDialogUtil.java
SimpleFastGallery/.classpath
SimpleFastGallery/.project
SimpleFastGallery/.settings/
SimpleFastGallery/.settings/org.eclipse.jdt.core.prefs
SimpleFastGallery/AndroidManifest.xml
SimpleFastGallery/assets/
SimpleFastGallery/bin/
SimpleFastGallery/bin/classes/
SimpleFastGallery/bin/classes.dex
SimpleFastGallery/bin/classes/com/
SimpleFastGallery/bin/classes/com/sklee/
SimpleFastGallery/bin/classes/com/sklee/simplegallery/
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$attr.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$drawable.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$id.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$layout.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R$string.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/R.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity$1.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity$2.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity$PREVIEW_MODE.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/SimpleFastGalleryActivity.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/BitmapDecoder$OnImageDecodeFinishListener.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/BitmapDecoder$RequestChangedException.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/BitmapDecoder.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/ProgressDialogUtil$1.class
SimpleFastGallery/bin/classes/com/sklee/simplegallery/utils/ProgressDialogUtil.class
SimpleFastGallery/bin/res/
SimpleFastGallery/bin/resources.ap_
SimpleFastGallery/bin/res/drawable-hdpi/
SimpleFastGallery/bin/res/drawable-ldpi/
SimpleFastGallery/bin/res/drawable-mdpi/
SimpleFastGallery/bin/SimpleFastGallery.apk
SimpleFastGallery/gen/
SimpleFastGallery/gen/com/
SimpleFastGallery/gen/com/sklee/
SimpleFastGallery/gen/com/sklee/simplegallery/
SimpleFastGallery/gen/com/sklee/simplegallery/R.java
SimpleFastGallery/proguard.cfg
SimpleFastGallery/project.properties
SimpleFastGallery/res/
SimpleFastGallery/res/drawable-hdpi/
SimpleFastGallery/res/drawable-hdpi/gallery_icon.jpg
SimpleFastGallery/res/drawable-ldpi/
SimpleFastGallery/res/drawable-ldpi/gallery_icon.jpg
SimpleFastGallery/res/drawable-mdpi/
SimpleFastGallery/res/drawable-mdpi/gallery_icon.jpg
SimpleFastGallery/res/layout/
SimpleFastGallery/res/layout/file_list_item.xml
SimpleFastGallery/res/layout/folder_list_item.xml
SimpleFastGallery/res/layout/main.xml
SimpleFastGallery/res/layout/main2.xml
SimpleFastGallery/res/values/
SimpleFastGallery/res/values/strings.xml
SimpleFastGallery/src/
SimpleFastGallery/src/com/
SimpleFastGallery/src/com/sklee/
SimpleFastGallery/src/com/sklee/simplegallery/
SimpleFastGallery/src/com/sklee/simplegallery/SimpleFastGalleryActivity.java
SimpleFastGallery/src/com/sklee/simplegallery/utils/
SimpleFastGallery/src/com/sklee/simplegallery/utils/BitmapDecoder.java
SimpleFastGallery/src/com/sklee/simplegallery/utils/ProgressDialogUtil.java