intent传值imageview图片笔记

本文记录了在Android中使用Intent在Activity之间传递图片的三种方式:1) 直接传递图片ID,但不常见;2) 将ImageView转换为Bitmap并通过Intent传递,但可能会因图片大小超过限制导致程序崩溃;3) 将Bitmap转化为byte数组再传递,这种方法成功解决了图片大小问题。

满足项目中的需求(即客户的需求)永远是我们开发人员的第一要务,现在需要在Activity之间进行图片的传递,自己试了好久,终于找到了几种方法,做下笔记,留着备用!
1.直接用intent传递图片ID的方法:
MainActivity代码:

     ImageView view = (ImageView)findViewById(R.id.View);
        view.setImageResource(R.drawable.aobama);
        intent = new Intent(MainActivity.this,Image.class);
        intent.putExtra("ID",R.drawable.aobama);
        Button button =  (Button)findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(intent);
            }
        });

Image.class代码:

 Intent intent = this.getIntent();
 ImageView imageView = (ImageView) findViewById(R.id.adasd_i);  imageView.setImageResource(intent.getIntExtra("ID",R.drawable.aobama));

这样就行了,但是感觉是不是有点呆呆的感觉,这样写,况且项目中一般很少会有这种需求;
第二种:把 Imageview 图片格式转换成 Bitmap 格式在用Intent传值得方法进行传递
下面代码:
MainActivity代码

package btzh.com.myintent;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView view = (ImageView)findViewById(R.id.View);
        view.setImageResource(R.drawable.aobama);
        Bitmap bitmap = setimage(view); //调用setimage方法,得到返回值bitmap
        intent = new Intent(MainActivity.this,Image.class);
        intent.putExtra("image",bitmap);
        Button button =  (Button)findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(intent);
            }
        });
    }
    //把图片转换成bitmap形式传递通过intent形式传递过去
    private Bitmap setimage(ImageView view1){
        Bitmap image = ((BitmapDrawable)view1.getDrawable()).getBitmap();
        Bitmap bitmap1 = Bitmap.createBitmap(image);
        return bitmap1;
    }
}

Image.class代码:

package btzh.com.myintent;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView;

/**
 * Created by IBM on 2016/12/14.
 */
public class Image extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sdfdsfdf);
        Intent intent = this.getIntent();
       ImageView imageView = (ImageView) findViewById(R.id.adasd_i);
        Bitmap bitmap = intent.getParcelableExtra("image");
        imageView.setImageBitmap(bitmap);
    }
}

这样就行了,但是在测试时,程序直接崩溃了,后来百度了一下错误,intent传值太大,一般不能超过 40K(不知对不对),后来换了一个小图片就成功了!
保错信息: 其中{(parcel size = 1440432)} 图片在bitmap状态下大概是:1.44M的样子,所以程序就崩溃了!

E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 1440432)

3.就是把bitmap存储为byte数组,然后再通过Intent传递。
下面直接上代码:

package btzh.com.myintent;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {
    Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView view = (ImageView)findViewById(R.id.View);

        view.setImageResource(R.drawable.aobama);

        Bitmap bitmap = setimage(view); //调用setimage方法,得到返回值bitmap

        intent = new Intent(MainActivity.this,Image.class);

        intent.putExtra("image",bytes);

        Button button =  (Button)findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(intent);
            }
        });

    //把图片转换成bitmap形式传递通过intent形式传递过去
    private Bitmap setimage(ImageView view1){
        Bitmap image = ((BitmapDrawable)view1.getDrawable()).getBitmap();
        Bitmap bitmap1 = Bitmap.createBitmap(image);
        return bitmap1;
    }

    //bitmap转换成byte形式
    private byte[] Bitmap2Bytes(Bitmap bm){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
        return baos.toByteArray();
    }
}
package btzh.com.myintent;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

/**
 * Created by IBM on 2016/12/14.
 */
public class Image extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sdfdsfdf);
        ImageView imageView = (ImageView) findViewById(R.id.adasd_i);
        Intent intent = this.getIntent();
        byte buff[]=intent.getByteArrayExtra("image");
        Bitmap bitmap = BitmapFactory.decodeByteArray(buff, 0, buff.length);
//        Bitmap bitmap = intent.getParcelableExtra("image");
        imageView.setImageBitmap(bitmap);
    }
}

测试成功,大公告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值