如何使用 Gallery 允许用户从应用程序中的 res/drawable 中选择资源?

发布于 2024-12-01 20:01:10 字数 1260 浏览 1 评论 0 原文

我之前在我的应用程序中使用过 android gallery 来允许用户从 SD 卡中选择图像(使用下面的代码)。

我的问题是:我怎样才能做同样的事情,但允许用户选择存储在我的 apps /res/drawable 目录中的图像?

使用gallery从SD中选取的代码:

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

然后在onActivityForResult中调用intent.getData()获取Image的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);
        }
    }
}

I have previously used the android gallery in my app to allow user to select an image from the SD card (using the code below).

My question is: How can I do the same, but allow user to select image that is stored in my apps /res/drawable dir?

Code for using gallery to pick from SD:

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

Then in onActivityForResult, call intent.getData() to get the Uri of the Image.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷月断魂刀 2024-12-08 20:01:10

虽然这不是最好的解决方案,但看起来我可能必须像本教程一样编写自己的图库视图:

mgmblog.com/2008/12/12/listing-androids-drawable-resources

更新:链接早已失效,但这里是相关代码允许我迭代我的应用程序资源可绘制对象:

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 是您的应用程序命名空间。

Although this isn't the best solution, Looks like I may have to write my own gallery view like this tutorial:

mgmblog.com/2008/12/12/listing-androids-drawable-resources

UPDATE: link is long dead, but here is the relevant code that allows me to iterate my apps res drawables:

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

Where com.example.appname is your apps namespace.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文