如何将按凌空下载的图像发送到下一个活动

时间:2015-07-26 13:15:13

标签: android image android-volley

我正在使用volley在我的活动listview下载图片和文字。 点击一行后,我将图片和文字传递给详细信息活动。 在详细信息活动上,我只希望将Image传递给另一项活动。

在对S / O进行研究后,我发现了一个有效的代码:

BitmapDrawable bd = (BitmapDrawable) ((NetworkImageView) view.findViewById(R.id.img2))
                    .getDrawable();
            Bitmap bitmapzoom=bd.getBitmap();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bd.getBitmap().compress(Bitmap.CompressFormat.PNG, 100, baos);
            byte[] imgByte = baos.toByteArray();
            Intent intent=new Intent(getApplicationContext(),ZoomImage.class);
            intent.putExtra("image", imgByte);
            startActivity(intent);
        }
    });

在下一个活动中,我会检索它:

Bundle extras = getIntent().getExtras();
        byte[] b = extras.getByteArray("image");

        Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
        BitmapDrawable background = new BitmapDrawable(bmp);
        findViewById(R.id.img2).setBackgroundDrawable(background);

然而,图片被放置为背景图片。我想将图片放在我的ImageView.不像上面的代码那样背景。

目前在ImageView上设置图像尚未成功。欢迎任何建议。

layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:orientation="vertical"
    tools:context="com.softtech.stevekamau.buyathome.ZoomImage">

    <ImageView
        android:id="@+id/back"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@drawable/back"/>

    <RelativeLayout
        android:id="@+id/root_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000">

        <ImageView
            android:id="@+id/img2"
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:scaleType="matrix"
            android:maxHeight="100dp"
            android:maxWidth="50dp" />
    </RelativeLayout>
    </LinearLayout>

它看起来像一个背景: enter image description here

4 个答案:

答案 0 :(得分:2)

编辑:使用位图设置imageview实际图像,而不是bitmapdrawable:

Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("image");

Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
findViewById(R.id.img2).setImageBitmap(bmp);

小心地在活动之间传递大图像,它可能不会在其他活动中显示图像。最好保存到内部或外部存储器,然后将其用于其他活动。

答案 1 :(得分:2)

获取图片的Url并通过bundle传递,稍后在活动中您可以使用Picasso库将其加载到下面的视图中,您可以查看代码。

private void setImageWithPicaso(String imageUrl) {
    if (!(imageUrl == null)) {
        Picasso.with(getActivity()).load(imageUrl).placeholder(R.drawable.placeholder_background).into(imageView, new Callback() {
            @Override
            public void onSuccess() {
                spinner.setVisibility(View.GONE);
            }

            @Override
            public void onError() {
                spinner.setVisibility(View.GONE);
                AppLog.showToastMessage(getActivity(), "Image  loading failed!");

            }
        });
    } else {
        spinner.setVisibility(View.GONE);
        AppLog.showToastMessage(getActivity(), "Image  loading failed!");
    }
}

答案 2 :(得分:0)

替换:

findViewById(R.id.img2).setBackgroundDrawable(background);

有:

findViewById(R.id.img2).setImageDrawable(background);
  

然而,图像被放置为背景图像。我想将图像放在我的ImageView中。不像上面的代码那样背景。

我想我得到了你的困惑。我不确定你是否完全理解ImageView是什么。你的图像实际上是你的imageview,否则你将无法看到它。

答案 3 :(得分:0)

我不建议您在活动之间传递图像数据。

建议的方法是将其保存在磁盘中,并在活动之间传递文件路径。