안드로이드 개발 질문/답변
(글 수 45,052)
package com.project.GCB; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.GridView; import android.widget.ImageView; public class SelectImage extends Activity{ private Context mContext = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gridgallery); ArrayList<BgImage> items = new ArrayList<BgImage>(); mContext = this; GridView lvMain = (GridView)findViewById(R.id.gvGallery); // 커스텀 ArrayAdapter 선언/초기화. final MyArrayAdapter aa = new MyArrayAdapter(this, R.layout.row, items); // 본 Activity의 아답터로 aa 지정. lvMain.setAdapter(aa); // 확인 버튼 클릭 이벤트 설정 Button btnView = (Button)findViewById(R.id.btnView); btnView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { aa.callImageViewer(); } }); Button btn = (Button)findViewById(R.id.btn_Right); btn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(SelectImage.this, SelectImage2.class); startActivity(intent); } }); } // ArrayAdapter에서 상속받는 커스텀 ArrayAdapter 정의. private class MyArrayAdapter extends ArrayAdapter<BgImage> { private ArrayList<String> arrDataList; private ArrayList<String> arrIdList; private ArrayList<BgImage> items; // 생성자 public MyArrayAdapter(Context context, int textViewResourceId, ArrayList<BgImage> items) { super(context, textViewResourceId, items); this.items = items; mContext = context; arrIdList = new ArrayList<String>(); arrDataList = new ArrayList<String>(); getArrayInfo(arrIdList,arrDataList); } // Image를 클릭 하였을 떄 Image를 크게 보기 위하여 Image의 정보를 호출 public final void callImageViewer() { Intent i = getIntent(); ArrayList<String> arrBuf = new ArrayList<String>(); for (int j=0; j<arrDataList.size(); j++){ if (items.get(j).getCheck()) { arrBuf.add(arrDataList.get(j)); } } i.putExtra("image", arrBuf); setResult(RESULT_OK, i); finish(); } // ListView에서 각 행(row)을 화면에 표시하기 전 호출됨. public View getView(final int position, View convertView, ViewGroup parent){ // LayoutInflater의 객체 inflater를 현재 context와 연결된 inflater로 초기화. LayoutInflater inflater = ((Activity)mContext).getLayoutInflater(); // inflator객체를 이용하여 \res\laout\row.xml 파싱 View row = (View)inflater.inflate(R.layout.row, null); // 체크박스 설정 변경 이벤트 설정 CheckBox chk = (CheckBox)row.findViewById(R.id.chkRow); chk.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // 체크박스 설정 변경시 정보 저장 items.get(position).setCheck(!items.get(position).getCheck()); } }); ImageView ivGrid; ivGrid = (ImageView)row.findViewById(R.id.ivRow); ivGrid.setScaleType(ImageView.ScaleType.FIT_CENTER); BitmapFactory.Options bfOpt = new BitmapFactory.Options(); bfOpt.inSampleSize = 8; Bitmap bmpImg = BitmapFactory.decodeFile(arrDataList.get(position), bfOpt); Bitmap bmpRs = Bitmap.createScaledBitmap(bmpImg, 50, 50, true); ivGrid.setImageBitmap(bmpRs); // 도전 //ivGrid.setImageResource(arrDataList.size()); // 커스터마이징 된 View 리턴. return row; } // 출력 갯수 지정하는 함수를 만들어 버리자~! public int getCount(){ //return mThumbIds.length; //return arrDataList.size(); return 4; } // 저장된 이미지를 불러와 arraylist에 넣기 private void getArrayInfo(ArrayList<String> arrID, ArrayList<String> arrData) { String[] proj = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.SIZE }; Cursor curImage = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj, null, null, null); if (curImage != null && curImage.moveToFirst()) { String strData; if (curImage.getCount() > 0) { //int iDataCol = curImage.getColumnIndex(MediaStore.Images.Media.DATA); } int iDataCol = curImage.getColumnIndex(MediaStore.Images.Media.DATA); //iDataCol = iDataCol -4; do { strData = curImage.getString(iDataCol); if (strData != null) { arrData.add(strData); BgImage bg = new BgImage(false); items.add(bg); } }while (curImage.moveToNext()); } curImage.close(); } } } class BgImage { private boolean chkImg; public BgImage (boolean _chkImg){ this.chkImg = _chkImg; } public void setCheck(boolean chk) { chkImg = chk; } public boolean getCheck() { return chkImg; } }
위와 같이 Sdcard의 이미지를 전부 불러오는 소스인데요
이미지가 총 12개 라고 가정하고 Activity를 3개씩 나누어 한 화면당 4장씩 나오게 했을 떄,
Activity가 넘어갈 시에 1 2 3 4 / 5 6 7 8 / 9 10 11 12 로 나오게 하려면 어떻게 해야 할까요?
보통 arrDataList.size()를 써버려서 전체 이미지만 가져오게 하더라고요.
하지만 그렇게 하면 2번째 Activity부터 5678을 구현하기 힘들더군요
이미지를 지정하는 방식이 아니라 sd카드에서 불어왔을 때 제가 출력하고 싶은 곳 부터 출력 하고 싶습니다...
지정하는 방법은 없을까요? 순서를 바꾸는 방법은 없을까요?