2011-11-30 3 views
0

다음 요구 사항이 내 모바일 응용 프로그램이 있습니다 :사용자 정의 안드로이드 갤러리

  1. 사진 앨범의 목록이 포함 된 갤러리가 표시되는 안드로이드 기본.
  2. 사용자가 특정 앨범을 선택하면 확인란이있는 모든 이미지가 표시됩니다.

갤러리 (SD 카드)의 모든 사진을 가져 오는 소스 코드를 이미 개발했습니다. &은 모든 이미지를 확인란으로 표시합니다.

위의 요구 사항을 구현하려면 사용자가 특정 앨범을 선택한 후에 만 ​​이미지의 확인란을 표시해야한다는 힌트/제안이 필요합니다.

답변

1

체크 박스가있는 격자보기가 구현되었습니다.이 코드를 살펴보면 그것에 대한 아이디어가 있습니다. 자바 Class :

public class GridWithCheckBoxesActivity extends Activity { 
    private int count; 
    private Bitmap[] thumbnails; 
    private boolean[] thumbnailsselection; 
    private String[] arrPath; 
    private ImageAdapter imageAdapter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final String[] columns = { MediaStore.Images.Media.DATA, 
       MediaStore.Images.Media._ID }; 
     final String orderBy = MediaStore.Images.Media._ID; 
     Cursor imagecursor = managedQuery(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, 
       null, orderBy); 
     int image_column_index = imagecursor 
       .getColumnIndex(MediaStore.Images.Media._ID); 
     this.count = imagecursor.getCount(); 
     this.thumbnails = new Bitmap[this.count]; 
     this.arrPath = new String[this.count]; 
     this.thumbnailsselection = new boolean[this.count]; 
     for (int i = 0; i < this.count; i++) { 
      imagecursor.moveToPosition(i); 
      int id = imagecursor.getInt(image_column_index); 
      int dataColumnIndex = imagecursor 
        .getColumnIndex(MediaStore.Images.Media.DATA); 
      thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
        getApplicationContext().getContentResolver(), id, 
        MediaStore.Images.Thumbnails.MICRO_KIND, null); 
      arrPath[i] = imagecursor.getString(dataColumnIndex); 
     } 
     GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid); 
     imageAdapter = new ImageAdapter(); 
     imagegrid.setAdapter(imageAdapter); 
     imagecursor.close(); 

     final Button selectBtn = (Button) findViewById(R.id.selectBtn); 
     selectBtn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       final int len = thumbnailsselection.length; 
       int cnt = 0; 
       String selectImages = ""; 
       for (int i = 0; i < len; i++) { 
        if (thumbnailsselection[i]) { 
         cnt++; 
         selectImages = selectImages + arrPath[i] + "|"; 
        } 
       } 
       if (cnt == 0) { 
        Toast.makeText(getApplicationContext(), 
          "Please select at least one image", 
          Toast.LENGTH_LONG).show(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "You've selected Total " + cnt + " image(s).", 
          Toast.LENGTH_LONG).show(); 
        Log.d("SelectedImages", selectImages); 
       } 
      } 
     }); 
    } 

    public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public ImageAdapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     public int getCount() { 
      return count; 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.galleryitem, null); 
       holder.imageview = (ImageView) convertView 
         .findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView 
         .findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 
        if (thumbnailsselection[id]) { 
         cb.setChecked(false); 
         thumbnailsselection[id] = false; 
        } else { 
         cb.setChecked(true); 
         thumbnailsselection[id] = true; 
        } 
       } 
      }); 
      holder.imageview.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        int id = v.getId(); 
        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_VIEW); 
        intent.setDataAndType(Uri.parse("file://" + arrPath[id]), 
          "image/*"); 
        startActivity(intent); 
       } 
      }); 
      holder.imageview.setImageBitmap(thumbnails[position]); 
      holder.checkbox.setChecked(thumbnailsselection[position]); 
      holder.id = position; 
      return convertView; 
     } 
    } 

    class ViewHolder { 
     ImageView imageview; 
     CheckBox checkbox; 
     int id; 
    } 
} 

galleritem.xml :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <ImageView android:id="@+id/thumbImage" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:layout_centerInParent="true" /> 
    <CheckBox android:id="@+id/itemCheckBox" android:layout_width="wrap_content" 
     android:button="@drawable/checkbox" android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> 
</RelativeLayout> 

main.xml에 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <Button android:id="@+id/selectBtn" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:text="Select" android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:minWidth="200px" /> 
    <GridView android:id="@+id/PhoneImageGrid" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:numColumns="auto_fit" android:verticalSpacing="10dp" 
     android:horizontalSpacing="10dp" android:columnWidth="90dp" 
     android:stretchMode="columnWidth" android:gravity="center" 
     android:layout_above="@id/selectBtn" /> 
</RelativeLayout> 
+0

감사합니다. 이미 Android Gallery에서 이미지 목록을 가져오고 각 이미지에 체크 박스를 추가하는 코드를 구현했습니다. 현재 시나리오는 Android 갤러리의 앨범 목록을 처음 표시해야하는 경우와 사용자가 특정 앨범을 클릭 할 때 확인란이있는 앨범 내의 모든 이미지를 표시해야하는 경우와 약간 다릅니다. – chiranjib

관련 문제