使用光标从图库中获取最近的图像 [英] Getting the recent images from gallery using cursor

查看:183
本文介绍了使用光标从图库中获取最近的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Cursor 从图库获取图片,并从图库中获取所有图片,是否有任何方法只获取最近的几张图片,例如最后20张图片图像捕获。



还有一个问题,我面对的是图像从旧的到新的顺序,我想得到的图像以相反的顺序(新到旧)。



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

我的代码获取图像:

  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 imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
thumbnailails [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();
}

我的适配器:

  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查看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自动生成方法存根
CheckBox cb =(CheckBox)v;
int id = cb.getId();
if(thumbnailailsselection [id]){
cb.setChecked(false);
thumbnailailsselection [id ] = false;
} else {
cb.setChecked(true);
thumbnailailsselection [id] = true;
}
}
}

holder.imageview.setImageBitmap(thumbnailails [position]);
holder.checkbox.setChecked(thumbnailailsselection [position]);
holder.id = position;
return convertView;
}
}

类ViewHolder {
ImageView imageview;
复选框;
int id;
}


解决方案

a href =http://developer.android.com/reference/android/content/ContentResolver.html#query%28android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java .lang.String [],%20java.lang.String%29rel =nofollow> query(),按文档格式化为SQL order by语句。如果你想要的值是降序而不是默认的升序,请执行:

  final String orderBy = MediaStore.Images .Media._ID +DESC;但是你特别询问使用日期作为排序,所以你可能想要这样做:

p>

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


I'm using Cursor to get the images from gallery and getting all the images from gallery, is there any way to get only few recent images, such as last 20 image captured.

One more problem, I am facing is the images are coming from older to new order, I want to get the image in reverse order(new to older).

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

My code to get image:

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();
}

My Adapter:

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;
}

解决方案

The order by argument to query(), per documentation, is formatted as a SQL order by statement. If you want the values in descending order as opposed to the default ascending order, do this:

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

But you specifically asked about using the date as the ordering, so you probably want this instead:

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

这篇关于使用光标从图库中获取最近的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆