简体   繁体   中英

I want to transfer the image from one activity to another

I have to transfer the image from one activity to another. In first activity the user selects the image out of several images from scroll view and that image has to be displayed in the imageview of next activity. Help required.

In your first Activity

Convert ImageView to Bitmap

    imageView.buildDrawingCache();
    Bitmap bitmap = imageView.getDrawingCache();

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

In second Activity

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

Then display bitmap in ImageView.

Note: this is not recommended. Should actually save the image somewhere and pass the path instead and retrieve from second activity.

you can pass it as a byte array and build the bitmap for display in the next activity. For instance:

In your first activity:

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);

In your second activity

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

You can do this with many way. simple is with intent. but it may hang your device and it also give you out of memory Exception in many device like Galaxy S3.

so i ll give you very simple way see below.

you can create static variable in one class like :

public class ABC{

public static Bitmap PHOTO = null;

}

now when you get bitmap from gallery or any other way then you have to save bitmap in this PHOTO variable.(this is possible in only onActivityResult, am i right?)

if you get photo from camera then code is.

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

and,

@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;
}
}

and use this PHOTO variable in any other Activity.

you can use this same way when pick photo from gallery.


hi this is edited ans.

this is just sample example of grid view. here you get idea about how pass image from one activity to another.

this is your main Activity class:

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://www.xda-developers.com/wp-content/uploads/2012/10/androidfigure.jpg?f39ce1",
            "http://1.bp.blogspot.com/-Ramp-o0Cp8s/T0VafXkE4uI/AAAAAAAAAQU/i703zg5MBgI/s1600/android-wallpaper5_1024x768.jpg",
            "http://www.thebiblescholar.com/android_awesome.jpg",
            "http://blogs-images.forbes.com/rogerkay/files/2011/07/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>

manifest file

<?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>

this is extra class: if you have bitmap then use this way:

package com.GridViewDemo;

import android.graphics.Bitmap;

public class test {

    public static Bitmap PHOTO = null;

}

i comment in code so, check it and if you have query then comment below this ans.

in first Activity first Make Sure you instantiate the bitmap at the top like Bitmap bitmap;

and then use this :- in the first Activity

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

and in the second activity:-

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

You can pass the URI of the Image to next Activity.

the URI which you get from onActivityResult()

and in onCreate() of the next Activity.

Decode the Bitmap again and set it to ImageView

See this post.

Use putExtra in first activity when you start second Activity. And in second Activity use getExtra() as follow:

In First Activity

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

In Second Activity

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

将您的图像转换为base64字符串格式并将其传递给下一个活动,然后再次将其解码为位图。

In first Activity :

@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);
    }
}

In second Activity :

@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 :)

First Activity:

Intent intent = new Intent(CurrentActivity, secondActivity.class);

intent.putExtra("resId", R.drawable.your image);
startActivity(intent);

Then your Target Activity:

Bundle bundle = getIntent().getExtras();

if(bundle!=null){
    int image = bundle.getInt("resId");
    ImageId.setImageResource(image);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM