안드로이드(Android) HorizontalScrollView 이용해 이미지 갤러리 만들기 – 2부 |
개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2 |
이번 갤러리는 리소스에서 이미지를 가져오는 것이
아니라 sdcard 에서 불러와 갤러리를 만듭니다.
HorizontalScrollView 에 View 를 추가하여
갤러리를 만들기 위해 먼저 테스트할 이미지를
추가합니다.
File Explorer 창으로 가서 Push a file 아이콘을
클릭해 이미지 파일일 넣습니다. 폴더는 Pictures 가
됩니다.
이미지를 표현하기 위해 LinearLayout 을 생성하고
LinearLayout.HORIZONTAL 옵션으로 가로 배치
합니다.
mBtnLayout = new LinearLayout(context); /** 가로로 자식들을 배치 함 */ mBtnLayout.setOrientation(LinearLayout.HORIZONTAL);
다음은 SDCARD 에 넣은 이미지를 불러오기
위해 함수를 만들었습니다.
Environment.getExternalStorageDirectory().getPath() 는
SDCARD 주소를 가져오며 Pictures 폴더명과
합쳐 주소를 완성합니다.
f.listFiles 함수로 파일리스트를 불러옵니다.
불러온 파일들의 Path 값을 얻어
List<String> imgListPath; 변수에 저장합니다.
// SDCARD 에 이미지를 가져옵니다. private void ReadSDCard() { ListtFileList = new ArrayList (); File f = new File( Environment.getExternalStorageDirectory().getPath() + "/Pictures/"); File[] files = f.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; tFileList.add(file.getPath()); } imgListPath = tFileList; }
SDCARD 에서 이미지를 불러온뒤 BitmapFactory.decodeFile
를 이용해 Bitmap 객체를 만듭니다. 이렇게 만든 Bitmap
객체를 i.setImageBitmap(bm); 로 이용해 이미지를
셋팅합니다.
레이아웃에 이미지갯수 만큼 addView 를 한뒤
HorizontalScrollView 에 추가합니다.
public HorizentalScrollViewMainView(Context context) { super(context); mBtnLayout = new LinearLayout(context); /** 가로로 자식들을 배치 함 */ mBtnLayout.setOrientation(LinearLayout.HORIZONTAL); this.ReadSDCard(); /** 이미지 추가 */ for (int cnt = 0; cnt < imgListPath.size(); cnt++) { Bitmap bm = BitmapFactory.decodeFile( imgListPath.get(cnt).toString()); ImageView i = new ImageView(context); i.setImageBitmap(bm); i.setLayoutParams(new LayoutParams(150, 100)); i.setScaleType(ImageView.ScaleType.FIT_XY); mBtnLayout.addView(i); } mHorizentalScrollView = new HorizontalScrollView(context); mHorizentalScrollView.addView(mBtnLayout); addView(mHorizentalScrollView); }
전체 Activity 소스는 다음과 같습니다.
import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; public class SampleActivity3 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new HorizentalScrollViewMainView(this)); } private class HorizentalScrollViewMainView extends LinearLayout { public HorizontalScrollView mHorizentalScrollView; public LinearLayout mBtnLayout; private List<String> imgListPath; public HorizentalScrollViewMainView(Context context) { super(context); mBtnLayout = new LinearLayout(context); /** 가로로 자식들을 배치 함 */ mBtnLayout.setOrientation(LinearLayout.HORIZONTAL); this.ReadSDCard(); /** 이미지 추가 */ for (int cnt = 0; cnt < imgListPath.size(); cnt++) { Bitmap bm = BitmapFactory.decodeFile( imgListPath.get(cnt).toString()); ImageView i = new ImageView(context); i.setImageBitmap(bm); i.setLayoutParams(new LayoutParams(150, 100)); i.setScaleType(ImageView.ScaleType.FIT_XY); mBtnLayout.addView(i); } mHorizentalScrollView = new HorizontalScrollView(context); mHorizentalScrollView.addView(mBtnLayout); addView(mHorizentalScrollView); } // SDCARD 에 이미지를 가져옵니다. private void ReadSDCard() { List<String> tFileList = new ArrayList<String>(); File f = new File( Environment.getExternalStorageDirectory().getPath() + "/Pictures/"); File[] files = f.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; tFileList.add(file.getPath()); } imgListPath = tFileList; } } }
실행한 화면은 1부와 동일하며 단지 이미지를 리소스가
아닌 SDCARD 에서 가져와 뿌려 줬다는 것입니다.
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) 2014년 9월 까지 플랫폼 버전과 화면해상도 분포 (0) | 2014.10.24 |
---|---|
안드로이드(Android) OS 버전과 시스템정보 알아오기 (0) | 2014.10.23 |
안드로이드(Android) 저장소(Sdcard) 에서 읽어온 파일이 이미지인지 판단하기 (0) | 2014.10.23 |
안드로이드(Android) google map API v2 에서 지도에 마커설정하기 (1) | 2014.10.22 |
안드로이드(Android) HorizontalScrollView 이용해 이미지 갤러리 만들기 – 1부 (0) | 2014.10.22 |
안드로이드(Android) XML 을 사용하여 이미지 버튼 배경 로딩하기 (0) | 2014.10.13 |
안드로이드(Android) SeekBar 로 배경색 변경하기 (0) | 2014.10.09 |
안드로이드(Android) android.util.DisplayMetrics 이용해 해상도를 측정하는 코드 (0) | 2014.09.27 |