满足项目中的需求(即客户的需求)永远是我们开发人员的第一要务,现在需要在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);
}
}
测试成功,大公告成!