正如标题几乎所说的那样。
这是我想要做的事情
1)打开图库(我知道怎么做) 2)从图库中选择图像 3)获取图像ID并将ID传递给另一个活动 4)在这个其他活动中,我想将此图像加载到ImageView中。
我知道我可以这样做
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
然后将数组传递给intent
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
然后从Bundle获取字节数组并转换为位图图像
Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageBitmap(bmp);
但我相信通过传递ID然后在下一个活动中获取id并从SD卡加载图像,内存和性能会更好。
答案 0 :(得分:0)
我从一个我正在研究的项目中获得了一些代码片段。也许这会有所帮助: (对不起,如果有些代码无关紧要,正如我在我的一个旧项目中所说的那样)
首先,当然,找到图片
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, "Select Picture"),
SELECT_PICTURE);
当用户选择图片时,将调用onActivityResult并将用户带回到之前的Activity(大部分时间都是在Activity中启动)。在这里,我们可以获得一些我们可以传递到下一个Activity的数据,例如图像URI。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case SELECT_PICTURE:
// Uri selectedImageUri;
selectedImageUri = data.getData();
if (pic.getDrawingCache() != null) {
pic.destroyDrawingCache();
}
pic.setImageURI(selectedImageUri);
pic.buildDrawingCache(true);
pic.setDrawingCacheQuality(ImageView.DRAWING_CACHE_QUALITY_HIGH);
pic.setMaxHeight(pic.getDrawable().getBounds().width());
tvPicInfo
.setText(String.valueOf(pic.getDrawable().getBounds()
.width())
+ "px"
+ " x "
+ String.valueOf(pic.getDrawable().getBounds()
.height()) + "px");
break;
case 2:
selectedImageUri = data.getData();
if (pic.getDrawingCache() != null) {
pic.destroyDrawingCache();
}
pic.setImageURI(selectedImageUri);
pic.buildDrawingCache(true);
pic.setDrawingCacheQuality(ImageView.DRAWING_CACHE_QUALITY_HIGH);
break;
}
}
}
现在我们已经选择了图像,这个方法可以获得它的路径,你可以将它传递给bundle中的下一个活动。
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
在下一个Activity中,从包中加载路径,就像您对字节数组一样。使用该路径,使用BitmapFactory
进行解码Bitmap bitmap = BitmapFactory.decodeFile(path);
我希望这可以帮助您完成旅程,快乐编码!
编辑:Else { how to send imageview from one activity to other 即使这看起来很像你不想要的