我希望将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...
}
在您因为不尝试而生我的气之前,我已经拥有了。最困难的部分是从设备存储中拉出并访问其中的照片。我只是不明白为什么可绘制图像是整数,以及为什么没有看似直接的方法可以将图像转换为类似用途的整数。
答案 0 :(得分:0)
您无法获取其整数引用,因为它们没有任何整数引用。
R.whatever
(R.drawable
,R.string
,R.xml
等)是由Android Studio生成的类,其中包含名称与您的资源相对应的整数字段。当您使用getDrawable()
之类的东西时,Android将使用您传递的整数来查找相应的资源并将其加载为图像。之所以如此,是因为资源已编译并存储在APK本身中,并且无法通过路径访问。
但是,内部存储器或SD卡上的图像不是资源。它们具有直接可访问的路径,并且不在任何APK中。 Android不会为它们提供整数ID,因为它们不需要整数ID,而这并不是它的工作原理。
要从存储中获取图像,您需要使用路径。