11

あるアクティビティから別のアクティビティに画像を転送する必要があります。最初のアクティビティでは、ユーザーはスクロール ビューから複数の画像から画像を選択し、その画像は次のアクティビティの画像ビューに表示する必要があります。ヘルプが必要です。

4

10 に答える 10

9

最初のアクティビティで

ImageView をビットマップに変換する

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

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

2 番目のアクティビティで

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

次に、ビットマップを ImageView に表示します。

注: これはお勧めしません。実際に画像をどこかに保存し、代わりにパスを渡し、2 番目のアクティビティから取得する必要があります。

于 2012-11-05T05:14:07.483 に答える
6

これをバイト配列として渡し、次のアクティビティで表示するビットマップを構築できます。例えば:

最初のアクティビティで:

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

2 番目のアクティビティで

if(getIntent().hasExtra("byteArray")) {
    ImageView previewThumbnail = new ImageView(this);
    Bitmap b = BitmapFactory.decodeByteArray(
        getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);        
    previewThumbnail.setImageBitmap(b);
}
于 2012-11-05T05:20:31.767 に答える
3

あなたは多くの方法でこれを行うことができます。シンプルは意図を持っています。ただし、デバイスがハングする可能性があり、GalaxyS3などの多くのデバイスでメモリ不足の例外が発生する可能性もあります。

だから私はあなたに非常に簡単な方法を与えるでしょう以下を見てください。

static次のような1つのクラスで変数を作成できます。

public class ABC{

public static Bitmap PHOTO = null;

}

ギャラリーまたはその他の方法からビットマップを取得する場合は、このPHOTO変数にビットマップを保存する必要があります(これは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;
}
}

このPHOTO変数を他のアクティビティで使用します。

ギャラリーから写真を選択するときにも同じように使用できます。


こんにちはこれは編集されたansです。

これはグリッドビューの単なるサンプル例です。ここでは、あるアクティビティから別のアクティビティに画像を渡す方法について理解できます。

これはあなたのメインのアクティビティクラスです:

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>

マニフェストファイル

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

}

私はコードでコメントしているので、それをチェックしてください。クエリがある場合は、この回答の下にコメントしてください。

于 2012-11-05T05:26:42.200 に答える
1

Image の URI を次の Activity に渡すことができます。

onActivityResult() から取得した URI

そして次のアクティビティの onCreate() で。

Bitmap を再度デコードし、ImageView に設定します。

于 2012-11-05T05:16:25.227 に答える
0

画像をbase64文字列形式に変換して次のアクティビティに渡し、再度ビットマップにデコードします。

于 2012-11-05T05:27:06.027 に答える
0

最初のアクティビティで:

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

2 番目のアクティビティで:

@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 ...
    }       
}       
于 2014-12-25T09:27:06.213 に答える
0

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


   }

}

ハッピーコーディング:)

于 2017-10-01T09:04:50.007 に答える
0

この投稿を参照してください。

2 番目のアクティビティを開始するときに、最初のアクティビティで putExtra を使用します。2 番目のアクティビティでは、次のように getExtra() を使用します。

最初のアクティビティで

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

2 番目のアクティビティで

Bitmap bmp = this.getIntent().getParcelableExtra("bmp");
于 2012-11-05T05:20:34.403 に答える