我想将图像从一个活动转移到另一个活动

我必须将图像从一个活动转移到另一个活动。 在第一个活动中,用户从滚动视图的几个图像中select图像,该图像必须显示在下一个活动的图像视图中。 需要帮助。

Solutions Collecting From Web of "我想将图像从一个活动转移到另一个活动"

在你的第一个活动

将ImageView转换为位图

imageView.buildDrawingCache(); Bitmap bitmap = imageView.getDrawingCache(); Intent intent = new Intent(this, NewActivity.class); intent.putExtra("BitmapImage", bitmap); 

在第二个活动

  Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage"); 

然后在ImageView中显示位图。

注意:这不是build议的。 实际上应该保存图像的地方,而不是通过path,并从第二个活动检索。

您可以将其作为字节数组传递,并在下一个活动中构build位图以供显示。 例如:

在你的第一个活动中:

 Intent i = new Intent(this, NextActivity.class); Bitmap b; // your bitmap ByteArrayOutputStream bs = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.PNG, 50, bs); i.putExtra("byteArray", bs.toByteArray()); startActivity(i); 

在你的第二个活动

 if(getIntent().hasExtra("byteArray")) { ImageView previewThumbnail = new ImageView(this); Bitmap b = BitmapFactory.decodeByteArray( getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length); previewThumbnail.setImageBitmap(b); } 

您可以将图像的URI传递给下一个活动。

你从onActivityResult()得到的URI

并在下一个Activity的onCreate()中。

再次解码位图并将其设置为ImageView

你可以用很多方法做到这一点。 简单是有意图的。 但它可能会挂起你的设备,它也会让你在Galaxy S3等许多设备上出现内存exception。

所以我会给你非常简单的方式见下文。

你可以在一个类中创buildstaticvariables,如:

 public class ABC{ public static Bitmap PHOTO = null; } 

现在当你从图库或其他任何方式获得位图,那么你必须保存在这个PHOTOvariables的位图(这是可能的只有onActivityResult,对吗?)

如果你从相机得到照片,那么代码是。

 Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, CAMERA_PIC_REQUEST); 

和,

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case CAMERA_PIC_REQUEST: Bitmap b = (Bitmap) data.getExtras().get("data"); if (b != null) { ABC.PHOTO = b; } break; } } 

并在任何其他Activity中使用此PHOTOvariables。

当从图库中select照片时,您可以使用相同的方式。


嗨,这是编辑ans。

这只是网格视图的示例。 在这里,您可以了解如何将图像从一个活动传递到另一个活动。

这是你的主要Activity类:

 package com.GridViewDemo; import java.io.InputStream; import java.net.URL; import java.util.GregorianCalendar; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class GridViewDemoActivity extends Activity { /** Called when the activity is first created. */ // String[] mArr = // {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; String[] mArr = { "http://img.androidcookie.com/android/androidfigure.jpg?f39ce1", "http://img.androidcookie.com/android/android-wallpaper5_1024x768.jpg", "http://img.androidcookie.com/android/android_awesome.jpg", "http://img.androidcookie.com/android/Android1.jpg" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); GridView gridView = (GridView) findViewById(R.id.gridView1); gridView.setAdapter(new ImageAdapter(this)); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub /** if you have bitmap here then you can use this way * Bitmap bitmap = getBitmap(); * test.PHOTO = bitmap; * * */ Intent i = new Intent(GridViewDemoActivity.this, newActiivty.class); i.putExtra("Image_Path", ""+mArr[arg2]); startActivity(i); } }); } public class ImageAdapter extends BaseAdapter { private Context mContext; public ImageAdapter(Context c) { mContext = c; } @Override public int getCount() { // TODO Auto-generated method stub return mArr.length; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ImageView imgView; if (convertView == null) { imgView = new ImageView(mContext); imgView.setLayoutParams(new GridView.LayoutParams(85, 85)); imgView.setScaleType(ImageView.ScaleType.CENTER_CROP); imgView.setPadding(8, 8, 8, 8); } else { imgView = (ImageView) convertView; } Drawable d = LoadImageFromWebOperations(mArr[position]); if (d == null) { imgView.setImageResource(R.drawable.icon); } else { imgView.setImageDrawable(d); } return imgView; } } public static Drawable LoadImageFromWebOperations(String url) { try { InputStream is = (InputStream) new URL(url).getContent(); Drawable d = Drawable.createFromStream(is, "src name"); return d; } catch (Exception e) { return null; } } } 

main.xml中

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <GridView android:id="@+id/gridView1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:numColumns="4"></GridView> </LinearLayout> 

newActivity.class

 package com.GridViewDemo; import java.io.InputStream; import java.net.URL; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class newActiivty extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.new_layout); String image_path = getIntent().getStringExtra("Image_Path"); ImageView imageview = (ImageView) findViewById(R.id.imageView1); Drawable d = LoadImageFromWebOperations(image_path); if (d != null) { imageview.setImageDrawable(d); } else { imageview.setImageResource(R.drawable.icon); } /** if you have bitmap then * imageview.setImageBitmap(test.PHOTO); * */ } public static Drawable LoadImageFromWebOperations(String url) { try { InputStream is = (InputStream) new URL(url).getContent(); Drawable d = Drawable.createFromStream(is, "src name"); return d; } catch (Exception e) { return null; } } } 

new_layout.xml

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:src="@drawable/icon" android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="320dp"></ImageView> </LinearLayout> 

清单文件

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.GridViewDemo" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="3" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".GridViewDemoActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".newActiivty"></activity> </application> </manifest> 

这是额外的类:如果你有位图,然后使用这种方式:

 package com.GridViewDemo; import android.graphics.Bitmap; public class test { public static Bitmap PHOTO = null; } 

我在代码注释,检查它,如果你有查询,然后评论下面这个答案。

看到这个职位。

当您启动第二个活动时,请在第一个活动中使用putExtra。 在第二个Activity中使用getExtra()如下:

在第一个活动

 Intent intent = new Intent(Activity1.this,Activity2.class); intent.putExtra("bmp",selectedImage); startActivity(intent); 

在第二个活动

 Bitmap bmp = this.getIntent().getParcelableExtra("bmp"); 

base64string格式转换您的图像,并将其传递给下一个活动,并再次将其解码为位图。

在第一个活动:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){ Intent showImageIntent = new Intent(this, ShowCameraPicture.class); showImageIntent.fillIn(data,Intent.FILL_IN_DATA); startActivity(showImageIntent); } } 

在第二个活动中:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getIntent().getExtras(); if(bundle!=null){ Bitmap image = (Bitmap)bundle.get("data"); //do whatever you need to do with the bitmap here ... } } 

//////////firstActivity.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.app.myapp.com.app44sendinginfofromoneactivitytoanother.MainActivity"> <RelativeLayout android:layout_width="368dp" android:layout_height="495dp" tools:layout_editor_absoluteX="8dp" tools:layout_editor_absoluteY="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:orientation="vertical"> <EditText android:id="@+id/edtName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Enter NAme" android:inputType="textPersonName" /> <EditText android:id="@+id/edtLastName" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Enter LastName" android:inputType="textPersonName" /> <EditText android:id="@+id/edtEmail" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Enter Email" android:inputType="textPersonName" /> <EditText android:id="@+id/edtPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="Enter Password" android:inputType="textPassword" /> <ImageView android:id="@+id/imgView" android:layout_width="match_parent" android:layout_height="200dp" app:srcCompat="@android:drawable/ic_menu_report_image" /> <RadioGroup android:id="@+id/rdoGroup" android:layout_width="match_parent" android:layout_height="50dp"> <RadioButton android:id="@+id/rdoMale" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Male" /> <RadioButton android:id="@+id/rdoFemale" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Female" /> </RadioGroup> <Button android:id="@+id/btnSend" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Send" /> </LinearLayout> </RelativeLayout> </android.support.constraint.ConstraintLayout> 

////////////// MainActivity.java

  public class MainActivity extends AppCompatActivity implements View.OnClickListener,CompoundButton.OnCheckedChangeListener{ EditText edtName,edtLastName,edtEmail,edtPassword; ImageView imgView; RadioButton rdoMale,rdoFemale; Button btnSend; String genderType = ""; int CAMERA_PIC_REQUEST = 99; Bitmap bitmap; // your bitmap @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edtName = (EditText) findViewById(R.id.edtName); edtLastName = (EditText) findViewById(R.id.edtLastName); edtEmail = (EditText) findViewById(R.id.edtEmail); edtPassword = (EditText) findViewById(R.id.edtPassword); btnSend = (Button) findViewById(R.id.btnSend); imgView = (ImageView) findViewById(R.id.imgView); rdoMale = (RadioButton) findViewById(R.id.rdoMale); rdoFemale = (RadioButton) findViewById(R.id.rdoFemale); btnSend.setOnClickListener(MainActivity.this); imgView.setOnClickListener(MainActivity.this); rdoMale.setOnCheckedChangeListener(MainActivity.this); rdoFemale.setOnCheckedChangeListener(MainActivity.this); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { switch (buttonView.getId()){ case R.id.rdoMale: if (isChecked){ genderType = "Male"; }else{ buttonView.setChecked(false); } break; case R.id.rdoFemale: if (isChecked){ genderType = "Female"; }else{ buttonView.setChecked(false); } break; } } @Override public void onClick(View v) { switch(v.getId()){ case R.id.btnSend: Intent intent = new Intent(MainActivity.this,SecondActivity.class); intent.putExtra("NAME",edtName.getText().toString()); intent.putExtra("LASTNAME",edtLastName.getText().toString()); intent.putExtra("EMAIL",edtEmail.getText().toString()); intent.putExtra("PASSWORD",edtPassword.getText().toString()); intent.putExtra("GENDER",genderType); //below is the code which you are looking for --> ByteArrayOutputStream bs = new ByteArrayOutputStream(); --> bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs); byte[] byteArray = bs.toByteArray(); intent.putExtra("PICTURE", byteArray); startActivity(intent); break; case R.id.imgView: Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); break; } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode,resultCode,data); if (requestCode == CAMERA_PIC_REQUEST) { bitmap = (Bitmap) data.getExtras().get("data"); imgView.setImageBitmap(bitmap); } } } 

//////////////////// SecondActivity.xml

  <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.app.myapp.com.app44sendinginfofromoneactivitytoanother.ResultActivity"> <RelativeLayout android:layout_width="368dp" android:layout_height="495dp" tools:layout_editor_absoluteX="8dp" tools:layout_editor_absoluteY="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:orientation="vertical"> <TextView android:id="@+id/txtName" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="FirstName:" android:textSize="24sp" /> <TextView android:id="@+id/txtLast" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="LastName:" android:textSize="24sp" /> <TextView android:id="@+id/txtEmail" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Email:" android:textSize="24sp" /> <TextView android:id="@+id/txtPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Password:" android:textSize="24sp" /> <TextView android:id="@+id/txtGender" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Gender:" android:textSize="24sp" /> <ImageView android:id="@+id/imgViewResult" android:layout_width="match_parent" android:layout_height="200dp" app:srcCompat="@android:drawable/ic_menu_report_image" /> </LinearLayout> </RelativeLayout> </android.support.constraint.ConstraintLayout> 

///////// SecondActivity.Java

  public class SecondActivity extends AppCompatActivity { Context ctx ; TextView txtName,txtLast,txtEmail,txtPassword,txtGender; ImageView imgViewResult; Bitmap bitmap; @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); ctx = this; setContentView(R.layout.activity_result); txtName = (TextView) findViewById(R.id.txtName); txtLast = (TextView) findViewById(R.id.txtLast); txtEmail = (TextView) findViewById(R.id.txtEmail); txtPassword = (TextView) findViewById(R.id.txtPassword); txtGender = (TextView) findViewById(R.id.txtGender); imgViewResult = (ImageView) findViewById(R.id.imgViewResult); Bundle extras = getIntent().getExtras(); String Name = extras.getString("NAME"); String LastName = extras.getString("LASTNAME"); String Email = extras.getString("EMAIL"); String Password = extras.getString("PASSWORD"); String Gender = extras.getString("GENDER"); txtName.setText("Name: "+Name); txtLast.setText("LastName: "+LastName); txtEmail.setText("Email: "+Email); txtPassword.setText("Password: "+Password); txtGender.setText("Gender: "+Gender); byte[] byteArray = extras.getByteArray("PICTURE"); bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length); imgViewResult.setImageBitmap(bitmap); } } 

HappyCoding 🙂

在第一个活动中首先确保你实例化顶部的位图像位图位图;

然后使用这个: – 在第一个活动

 ByteArrayOutputStream bs = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs); byte[] byteArray = bs.toByteArray(); intent.putExtra("PICTURE", byteArray); startActivity(intent); 

在第二项活动中: –

 byte[] byteArray = extras.getByteArray("PICTURE"); bitmap = BitmapFactory.decodeByteArray(byteArray,0,byteArray.length); imgViewResult.setImageBitmap(bitmap);