2

I have a working custom camera and gallery view in my android app. My camera saves pictures with a timestamp essentially as their name in a specific folder which i have successfully got showing in my gallery. It seems that it sorts these images by default from oldest to newest or alphabetically, not sure.. but i would like them to display in the opposite order.. can someone point me in the right direction? is it possible? do i change my BaseAdapter or my oncreate of my gallery activity...

my gallery activity:

public class GalleryView extends Activity{

    ImageView imageView;
    Cursor cursor;
    private int columnIndex;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gallery);
        Gallery ga = (Gallery)findViewById(R.id.Gallery01);
        // Set up an array of the Thumbnail Image ID column we want
        String[] projection = {MediaStore.Images.Media._ID};
        // Create the cursor pointing to the SDCard
        cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection, // Which columns to return
                MediaStore.Images.Media.DATA + " like ? ",
                new String[] {"%LC/images%"},  
                null);
        // Get the column index of the Thumbnails Image ID
        columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

        ga.setAdapter(new GallImageAdapter(this,cursor,columnIndex));



    }



}

my custom adapter:

public class GallImageAdapter extends BaseAdapter {
    public Cursor cursor;
    private int columnIndex;
    private Context context;
    int imageBackground;

    public GallImageAdapter(Context ctx, Cursor cur, int cIn) {
        context = ctx;
        columnIndex = cIn;
        cursor = cur;
    }

    @Override
    public int getCount() {

        return cursor.getCount();
    }

    @Override
    public Object getItem(int position) {

        return position;
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v;
        if(convertView ==null){
            v = LayoutInflater.from(context).inflate(R.layout.galitem, parent, false);
        }else{
            v = convertView;
        }
        ImageView photo = (ImageView) v.findViewById(R.id.imageView);
        ImageView border = (ImageView) v.findViewById(R.id.borderView);
        ImageView d = (ImageView) v.findViewById(R.id.delView);

        // Move cursor to current position
        cursor.moveToPosition(position);
        // Get the current value for the requested column
        int imageID = cursor.getInt(columnIndex);
        // obtain the image URI
        Uri uri = Uri.withAppendedPath( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID) );
        String url = uri.toString();
        // Set the content of the image based on the image URI
        int originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length()));
        Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(),
                        originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
        photo.setImageBitmap(b);

        photo.setScaleType(ImageView.ScaleType.FIT_CENTER); 

        return v;
    }

}
4

1 に答える 1

1

最後のパラメーターは、対象の URI の順序を記述するためのものです。

このアプローチを試して、画像を降順に並べ替えます

final String orderBy = MediaStore.Images.Media._ID;

cursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            projection, // Which columns to return
            MediaStore.Images.Media.DATA + " like ? ",
            new String[] {"%LC/images%"},  
            orderBy + " DESC");
于 2014-06-23T11:18:53.030 に答える