我正在寻找一个ImageView对象的内置方法来告诉我从哪个文件中检索到我的图像。
例如我在代码中的早期调用...
ImageView iv = new ImageView(MainActivity.this);
iv.setImageBitmap(BitmapFactory.decodeFile(f.getAbsolutePath()));
假设我不再引用'f'并且需要找出f是什么。有没有办法做到这一点?我的工作是创建一个扩展ImageView的类,并使用它减少String。 (或者在ImageView和String之间创建一个Map)
建议?
答案 0 :(得分:8)
最简单的解决方法可能是使用ImageView的标记:
ImageView iv = new ImageView(MainActivity.this);
String path = f.getAbsolutePath();
iv.setImageBitmap(BitmapFactory.decodeFile(path));
iv.setTag(path);
检索路径:
String path = (String) iv.getTag();
答案 1 :(得分:1)
据我所知,BitmapFactory.decodeFile返回的所有内容都是Bitmap。由于Bitmap可能来自任何源(并非所有源都有路径,例如来自RAM),因此它没有封装在其中的文件路径。
关于您的解决方法 - 任何人都可以,但选择一个取决于您的内存/速度要求。例如,如果你拥有的是一对,你可以使用Pair而不是地图,或者你可以只保留位图旁边的路径 - 但这只是挑剔。
答案 2 :(得分:0)
// GET THE URI FROM THE IMAGE (YOU NEED A BITMAP FOR THIS - WORKAROUND FOLLOWS)
Uri tempUri = getImageUri(getApplicationContext(), bitmap);
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
// THE WORKAROUND (OPTIONAL IN CASE YOU DO NOT HAVE A BITMAP)
Bitmap bitmap = ((BitmapDrawable)youImageView.getDrawable()).getBitmap();
信用:https://stackoverflow.com/a/8306683/450534
// NOW THAT YOU WILL HAVE THE URI, USE THIS TO GET THE ABSOLUTE PATH OF THE IMAGE
File finalFile = new File(getRealPathFromURI(tempUri));
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
根据我使用Android的经验,我唯一需要的就是当我开始使用Twitter4J SDK和TwitPic API时。 TwitPic需要您要上传的图像的绝对路径。这是我发现的最佳解决方案(实际上是几种不同解决方案的组合),但它总是像魅力一样。希望它可以帮到你。