在Android中,从捕获中获取图像并在另一个布局中使用另一个活动显示图像。

4

我希望在点击“Capture”按钮后,在FirstActivity中展示捕获的图像,并在activity_second(layout)中使用SecondActivity展示图像。

FirstActivity

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first);

    Button take_photo = (Button) findViewById(R.id.btn_capture);
    take_photo.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivity(i);
            }
        });
}

布局 activity_first

> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/btn_capture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="21dp"
        android:text="Capture" />

</RelativeLayout>

第二个活动

> public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        ImageView view = (ImageView) findViewById(R.id.view_photo);
    }

活动第二页

> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/view_photo"
        android:layout_width="260dp"
        android:layout_height="374dp" />

</LinearLayout>

在我的清单文件中,我使用了以下代码:<uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera"/>。 - kongkea
阅读此链接:http://developer.android.com/reference/android/app/Activity.html#StartingActivities - Mohsin Naeem
哦,先生,我不知道如何接受,因为我只知道如何提问。 - kongkea
4个回答

5

使用startActivityForResult()而不是startActivity()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    Bitmap thumbnail = null;
    if (requestCode == CAMERA_PIC_REQUEST) {
        if (resultCode == RESULT_OK) {
            thumbnail = (Bitmap) data.getExtras().get("data");
            Intent i = new Intent(this, NextActivity.class);
            i.putExtra("name", thumbnail);
            startActivity(i);
        }
    }
}

在下一个活动中,尝试使用这个。
protected void onCreate(Bundle savedInstanceState) {
    //TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //intialize the image view 

    Bitmap bitmap  = getIntent().getExtras().getParcelable("name");
    //set the image here.
}

希望这能对您有所帮助。

它不知道这个CAMERA_PIC_REQUEST,但我尝试在SecondActivity中加入'private static final int CAMERA_PIC_REQUEST = 0;'。在'view.setImageBitmap(bitmap);'后,它会打开相机并拍照,但是在回到FirstActivity时没有在SecondActivity中显示图像。 - kongkea
你在第一个活动中使用了 startActivityForResult(intent, CAMERA_PIC_REQUEST) 吗?private final int CAMERA_PIC_REQUEST = 1; 已经足够了,不需要使用 static。 - G_S
使用startActivityForResult(i,someRequestCode)而不是startActivity(i); 相机应用程序将启动,并在调用startActivityForResult()时转到onActivityResult()。 - G_S
我使用以下代码:public void onClick(View v) { Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(i, CAMERA_PIC_REQUEST); }但是在拍照后,应用程序会提示“很遗憾,相机已停止运行”。 - kongkea
请在清单文件中声明新的Activity并重新检查。 - G_S
这是一个项目,请您重新校对一下。非常抱歉给您带来麻烦了。链接为http://www.mediafire.com/?n2a9o98su6vjdm1。 - kongkea

2
您可以使用以下代码来解决问题:
您的第一个活动:
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        Button take_photo = (Button) findViewById(R.id.btn_capture);
        take_photo.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {
                // create Intent to take a picture and return control to the calling application
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                // start the image capture Intent
                startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) 
        {
            Bitmap imageData = null;
            if (resultCode == RESULT_OK) 
            {
                imageData = (Bitmap) data.getExtras().get("data");

                Intent i = new Intent(this, SecondActivity.class);
                i.putExtra("name", imageData );
                startActivity(i);

            } 
            else if (resultCode == RESULT_CANCELED) 
            {
                // User cancelled the image capture
            } 
            else 
            {
                // Image capture failed, advise user
            }
        }
    }

以及第二个Activity:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Bitmap bitmap  = getIntent().getExtras().getParcelable("name");
        ImageView view = (ImageView) findViewById(R.id.view_photo);
        view.setImageBitmap(bitmap); 
    }

今日免费次数已满, 请开通会员/明日再来
<uses-feature android:name="android.hardware.camera" />

我希望这个能够正常运行。


你能回答这个问题吗?http://stackoverflow.com/questions/11839042/how-to-make-background-push-up-when-click-edittext-in-android-like-facebook-log - kongkea

1
public void onClick(View v) 
    {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                    
    mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                                       "image" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
    try 
        {                       
            startActivityForResult(intent, PICK_FROM_CAMERA);
        } 
    catch (ActivityNotFoundException e) 
        {
            e.printStackTrace();
        }
    }

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        if (resultCode != RESULT_OK) return;       
        switch (requestCode) 
            {
                case PICK_FROM_CAMERA:
                    Bitmap photo =  null;           
                    Bundle extras = data.getExtras();
                    if (extras != null) 
                    {               
                        photo = extras.getParcelable("data");
                    }   
                    Intent i =  new Intent(this,SecondActivity.class);
                    i.putExtra("image", photo);
                    startActivity(i);
                    break;  
    }

在第二个活动中:
    bMap =  getIntent().getParcelableExtra("image");
    mImageView.setImageBitmap(bMap);

但是它无法保存到我的SD卡。 - kongkea

0
获取您存储的图像路径,并使用意图将其作为额外参数传递到onActivityResult()中的其他活动中。 希望这可以帮助您。

再试一次...在我拍摄之后,它没有保存到我的SD卡中。 - kongkea
是的,Samsung Galaxy Tab 2 10.1和使用Android 4.0.3的模拟器。 - kongkea
你的应用程序是否将捕获的图像保存到相册中? - G_S
哦,我尝试了@Febi M Felix上面的代码。我该怎么做更多呢? - kongkea
当我勾选捕获时,什么也没有发生,相机模式仍然保持不变。这是项目camera_v2的链接:http://www.mediafire.com/?tur88k2nzue72ca。 - kongkea
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接