2

我正在寻找 ImageView 对象的内置方法来告诉我从哪个文件中检索了图像。

例如,在我之前调用的代码中......

ImageView iv = new ImageView(MainActivity.this);                
iv.setImageBitmap(BitmapFactory.decodeFile(f.getAbsolutePath()));

假设我不再引用“f”并且需要找出 f 是什么。有没有办法做到这一点?我的工作是创建一个扩展 ImageView 的类并有一个与之匹配的字符串。(或者在 ImageView 和 String 之间创建一个 Map)

建议?

4

3 回答 3

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();
于 2013-04-05T04:14:23.713 回答
1

据我所知,所有 BitmapFactory.decodeFile 返回的是一个位图。由于位图可以来自任何来源(并非所有来源都有路径,例如来自 RAM),因此它没有封装在其中的文件路径。

关于您的解决方法 - 任何方法都可以,但选择一个取决于您的内存/速度要求。例如,如果您只有一对,您可以使用 Pair 代替地图,或者您可以只将路径保留在位图旁边 - 但这只是吹毛求疵。

于 2013-04-05T01:53:06.003 回答
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 需要你要上传的图片的绝对路径。这是我找到的最好的解决方案(实际上是几种不同解决方案的组合),但它总是很有魅力。希望它可以帮助你。

于 2013-04-05T03:23:40.423 回答