2016-04-05 27 views
1

ile imleçten son görüntüyü alma Galeriden görüntüler almak ve galerideki tüm görselleri aldığım için Cursor kullanıyorum son 20 resmi yakalama gibi son birkaç resme ulaşmanın herhangi bir yolu var.ContentResolver

Bir sorun daha var, görüntülerin eskiden yeni siparişe gelmesiydi, görüntüyü ters sırada (yeniden büyüğe) almak istiyorum.

final String[] columns = { MediaStore.Images.Media.DATA, 
       MediaStore.Images.Media._ID }; 
final String orderBy = MediaStore.Images.Media._ID; 

Kodum görüntü elde etmek için:

public void getImg(){ 
    Cursor imagecursor = getContentResolver().query(
      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(); 
} 

Benim Adaptör:

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 View.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.setImageBitmap(thumbnails[position]); 
     holder.checkbox.setChecked(thumbnailsselection[position]); 
     holder.id = position; 
     return convertView; 
    } 
} 

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

https://github.com/amirarcan e/yeni görseller –

+0

Teşekkürler adam ben bu kontrol edeceğim :) – HAXM

cevap

2

query() için argüman tarafından sipariş, dokümantasyon başına, deyim tarafından SQL sipariş olarak biçimlendirilir. Varsayılan artan karşıt olarak azalan değerleri istiyorsanız, bunu yapmak:

final String orderBy = MediaStore.Images.Media._ID + " DESC"; 

Ama özellikle sipariş olarak tarihini kullanarak sorulduğunda, bu nedenle muhtemelen bu yerine istiyorum:

final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC"; 
yalnızca orderBy en son 20 isterseniz Doug'un cevap ilaveten
+0

Teşekkürler adam benim çok fazla zaman var, benim ana sorun sadece birkaç görüntü almak için imleç sadece 20 son yakalanan görüntüleri almak için bir çözüm verebilir galeride görüntülerin uygulaması yavaş şiirleri, sanırım sadece fiew görüntüleri için isteksizliği engelleyecektir – HAXM

+0

http://stackoverflow.com/questions/12640480/specifying-limit-offset-for-contentprovider-queries –

+0

Kullanmaya çalıştım Bu, ama eğer ben useBy kaldırmak zorunda kullanacağım ve benim app kullanmak için çöküyor daha iyi bir çözüm takdir edilecektir. – HAXM

1

, bunu yapabilirsiniz:

final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC LIMIT 20";

+0

Teşekkür katkı için teşekkürler adam – HAXM