Android:获取SD存储设备中图像的整数值吗?

时间:2018-11-30 15:05:26

标签: java android arraylist android-bitmap

我希望将SD卡存储中的图像添加到Interger阵列列表中。

目前,我可以显示可绘制文件夹中的图像,因为它们(以某种方式)为int格式,例如:Log.d(“ MyTag”,R.drawable.ic_launcher_background));当前返回我2131230825。

我可以通过以下方式访问我的SD卡图像:/storage/emulated/0/Android/data/com.hangr.hangr/files/Pictures/Hangr_20181119__153130.jpg(字符串格式)。我还可以使用“ Bitmap myBitmap = BitmapFactory.decodeFile(f.get(i));”来制作位图。 (位图格式)。

关于如何将这些字符串/位图形式传递到int对象的任何想法吗?

package com.myapp.myapp;
imports ...
public class test extends Activity {

    public ArrayList<Integer> mThumbIds = new ArrayList<>();

    File[] listFile;
    ArrayList<String> f = new ArrayList<String>();// list of file paths
    ArrayList<Bitmap> myBitmapArrayList = new ArrayList<Bitmap>();// list of bitmaps

    @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);

        getFromSdcard();

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        // Test: adding drawable items to my interger list
        mThumbIds.add(R.drawable.logo);   
    }

    //************** important function that calls from my SD card
    public void getFromSdcard(){
        File file = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        if (file.isDirectory()) {
            listFile = file.listFiles();
            for (int i = 0; i < listFile.length; i++)
            {
                f.add(listFile[i].getAbsolutePath());
                Bitmap myBitmap = BitmapFactory.decodeFile(f.get(i));
                fml.add(myBitmap);
            }
        }
        //************** TESTING THE VALUE OF MY VARIABLES
        Log.d("MyTag", "File file " + file); ///storage/emulated/0/Android/data/com.myapp.myapp/files/Pictures
        Log.d("MyTag", "File length " + file.isDirectory()); //true
        Log.d("MyTag", "First element in f: " + f.get(0)); ///storage/emulated/0/Android/data/com.myapp.myapp/files/Pictures/20181119__153130.jpg

        Log.d("MyTag", "All the Bitmaps? " + myBitmapArrayList); //returns huge list of bitmaps, i.e. android.graphics.Bitmap@39bd71a
        Log.d("MyTag", "Drawables? " +  (R.drawable.ic_launcher_background)); //returns me 2131230825

    }



    public class ImageAdapter extends BaseAdapter {

    //************** code to zoom in on images, from https://www.androidbegin.com/tutorial/android-gridview-zoom-images-animation-tutorial/


    public View getView(final int position, View convertView, ViewGroup                 parent) {

            final ImageView imageView;
            if (convertView == null) {
                imageView = new ImageView(mContext);
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            } else {
                imageView = (ImageView) convertView;
            }

            imageView.setImageResource(mThumbIds.get(position));
           // imageView.setImageListener(bottoms_Listener);
            imageView.setTag(mThumbIds.get(position));
            imageView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    int id = (Integer) arg0.getTag();
                    zoomImageFromThumb(arg0, id);
                }
            });

            return imageView;
        }

        private void zoomImageFromThumb...


}

在您因为不尝试而生我的气之前,我已经拥有了。最困难的部分是从设备存储中拉出并访问其中的照片。我只是不明白为什么可绘制图像是整数,以及为什么没有看似直接的方法可以将图像转换为类似用途的整数。

1 个答案:

答案 0 :(得分:0)

您无法获取其整数引用,因为它们没有任何整数引用。

R.whateverR.drawableR.stringR.xml等)是由Android Studio生成的类,其中包含名称与您的资源相对应的整数字段。当您使用getDrawable()之类的东西时,Android将使用您传递的整数来查找相应的资源并将其加载为图像。之所以如此,是因为资源已编译并存储在APK本身中,并且无法通过路径访问。

但是,内部存储器或SD卡上的图像不是资源。它们具有直接可访问的路径,并且不在任何APK中。 Android不会为它们提供整数ID,因为它们不需要整数ID,而这并不是它的工作原理。

要从存储中获取图像,您需要使用路径。