Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(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() {
	List tFileList = 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 에서 가져와 뿌려 줬다는 것입니다.

 

반응형
Posted by 녹두장군1
,