将ImageView传递给下一个活动

时间:2015-03-03 10:32:02

标签: java android android-activity bitmap imageview

我一直在搜索和搜索并寻找好几天,但我似乎无法找到我做错的事情,所以你是我最后的希望!

我的第一个活动有多个图像。当我按下一个时,我想要打开第二个活动,只显示点击的图像。我试图将点击的图像转换为位图,然后使用意图发送它,以便我的第二个活动可以检索它。

这是我的第一个Activity的代码(位图....' drawable'用红色加下划线,因此是意图.....'这个,SubActivity.class&#39 )。我做错了什么?

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ImageView imgview = (ImageView) findViewById(R.id.image);
        imgview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Haal de drawable op uit de imageview
                Drawable drawable = imgview.getDrawable();

                // Zet de drawable om naar een ByteArray zodat we deze kunnen versturen met een intent
                // want we kunnen niet zomaar een drawable in een intent gooien
                Bitmap bitmap = BitmapFactory.decodeResource(drawable);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
                byte[] b = baos.toByteArray();

                // Maak de intent aan en stuur de ByteArray mee waar de drawable in zit
                Intent intent;
                intent = new Intent(this,SubActivity.class);
                intent.putExtra("witte_tulp_small", b);
                startActivity(intent);
            }
        });
    }
}

这是我第二个活动中的代码:

public class SubActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);

        // Intent uitlezen
        Bundle extras = getIntent().getExtras();
        byte[] b = extras.getByteArray("witte_tulp_small");

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

        image.setImageBitmap(bmp);
    }

}

3 个答案:

答案 0 :(得分:2)

位图为Parcelable。您可以将parcelable对象放在bundle或intent

Intent intent = new Intent(this, SubActivity.class);
intent.putExtra("bitmap", bitmap);

并在另一端回读

Bitmap bitmap = (Bitmap) getIntent().getParcelableExtra("bitmap");

答案 1 :(得分:0)

您应该只将图像的发送到另一个活动,这将重新创建图像视图

答案 2 :(得分:0)

如果两个活动都在同一个应用程序中,您只需传递drawable id:

MainActivity

intent.putExtra("witte_tulp_small", R.id.image);

SubActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);

    // Intent uitlezen
    Bundle extras = getIntent().getExtras();

    int resId = extras.getInt("witte_tulp_small");
    ImageView image = (ImageView) findViewById(R.id.image);
    image.setImageResource(resId);
}