Как я могу использовать Галерею, чтобы позволить пользователю выбирать ресурс из res / drawable в приложении? - PullRequest
2 голосов
/ 27 августа 2011

Ранее я использовал галерею Android в своем приложении, чтобы позволить пользователю выбрать изображение с SD-карты (используя код ниже).

Мой вопрос: как я могу сделать то же самое, но разрешитьпользователю выбрать изображение, которое хранится в моем каталоге apps / res / drawable dir?

Код для использования галереи для выбора с SD:

Intent i = new Intent(Intent.ACTION_PICK,
               android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, ACTIVITY_SELECT_IMAGE); 

Затем в onActivityForResultвызовите intent.getData (), чтобы получить Uri изображения.

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case REQ_CODE_PICK_IMAGE:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();


            Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
        }
    }
}

1 Ответ

1 голос
/ 28 августа 2011

Хотя это не лучшее решение, похоже, мне, возможно, придется написать свой собственный вид галереи, как этот урок:

mgmblog.com / 2008/12/12 / реклама-андроиды-Drawable-ресурсы

ОБНОВЛЕНИЕ: ссылка давно устарела, но вот соответствующий код, который позволяет мне перебирать свои приложения с возможностью рисования:

Field[] drawables = com.example.appname.R.drawable.class.getFields();
  for (Field f : drawables) {
    try {
        System.out.println("com.example.appname.R.drawable." + f.getName());
    } catch (Exception e) {
        e.printStackTrace();
    }
  }

Где com.example.appname - это пространство имен ваших приложений.

...