2013-08-04 246 views
1

我有Activity1有一个ImaveView包括图像预览。 一旦我按下按钮,我将从Activity1移动到Activity2。在Activity2中,我没有图像预览,但是有一个选项按钮“保存Activit1的图像?”是或否。Android - 如何将ImageView从一个活动转移到另一个活动?

目前我正在做错误的方式,就像将图像保存在磁盘中,然后从磁盘读取它。但有没有办法没有保存图像,我可以将一个imageView从Activity1转移到Activity2?

以下是我如何在Activity1> ImageView中获取图片,然后需要将其移至Activity2。任何想法?

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.imageView = (ImageView)this.findViewById(R.id.picture);    
     Button photoButton = (Button) this.findViewById(R.id.capture_btn);  
     Button btnShareToEmail = (Button) this.findViewById(R.id.btnshare); 
     btnShareToEmail.setOnClickListener(this); 

     //photoButton.setOnClickListener(new View.OnClickListener() { 
      //@Override 
     // public void onClick(View v) { 
      // Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      // startActivityForResult(cameraIntent, CAMERA_REQUEST); 
     // } 
     //}); 

     // without frozen 
     new Handler().postDelayed(new Runnable() { public void run() { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_REQUEST); 
     }}, 100);  
    } 



    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 



    } 
    } 

编辑:

//设置 - 活性1

Intent winShare = new Intent(getBaseContext(), Activity2.class); 
winShare.putExtra("Title", "r2.jpg"); 
winShare.putExtra("image1", photo);   
//int image_link = getIntent().getIntExtra("image1"); 
startActivityForResult(winShare,0); 

//获取 - 活性2

Bitmap bitmap = (Bitmap) getIntent().getParcelableExtra("image1"); // BITMAP_SHARED_KEY = "bitmap_shared_key" 

    imageView.setImageBitmap(bitmap); 
    // save it 
    imageView.buildDrawingCache(); 
    Bitmap bm=imageView.getDrawingCache(); 
    OutputStream fOut = null; 
    Uri outputFileUri; 
    try { 
     File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MYAPPPPPPPPPS" + File.separator); 
     root.mkdirs(); 
     File sdImageMainDirectory = new File(root, "myPicName.jpg"); 
     outputFileUri = Uri.fromFile(sdImageMainDirectory); 
     fOut = new FileOutputStream(sdImageMainDirectory); 
     bm.compress(Bitmap.CompressFormat.PNG, 100, fOut); 
     fOut.flush(); 
     fOut.close();  
    } catch (Exception e) { 
    Toast.makeText(this, "Error occured. Please try again later.",Toast.LENGTH_SHORT).show(); 
    } 
+1

你必须做putExtra当你开始另一个活动,和图像的传输路径(如它来自galery或相机)或int值(R.drawable。???) –

回答

1

有很多方法可以解决这个问题。这里有2点简单的方法:

首先,你可以阅读更多关于SharedPreferences

第二,你可以putExtra位图,从这个活动到另一个这样的活动:

putExtra:

intent.putExtra(BITMAP_SHARED_KEY, yourBitmap); 
startActivity(intent); 

getBitmap您已共享

Bitmap bitmap = (Bitmap) intent.getParcelableExtra(BITMAP_SHARED_KEY); // BITMAP_SHARED_KEY = "bitmap_shared_key" 
1

所有你需要了解的是,当第一你越来越以这种方式使用相机活动的图像,您将获得拍摄图像的缩略图版本。为了得到它必须被保存在一个完整大小的图片,你可以看看这个博客文章中,我在这个问题上写了更多信息:

Use Camera Activity for Thumbnail and Full Size Image

现在对于你的问题,我认为,最好的选择是将这个图像保存到一个文件中(在指南中描述),并使用图像的字符串路径将其他内容传递给以下活动。

1

简单的方式来使用这个

  1. 第一个活动

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.men_icon); 
    Bundle extras = new Bundle(); 
    Intent intent=new Intent(FirstActivity.class,SecondActivity.class); 
    extras.putParcelable("Bitmap", bitmap); 
    intent.putExtras(extras); 
    startActivity(intent); 
    
  2. 次活动

    ImageView iv_photo=(ImageView)findViewById(R.id.iv_photo); 
    Bundle extras = getIntent().getExtras(); 
    Bitmap bmp = (Bitmap) extras.getParcelable("Bitmap"); 
    iv_photo.setImageBitmap(bmp); 
    
相关问题