Capture Image from Camera and Display in Activity

前端 未结 16 1029
悲&欢浪女
悲&欢浪女 2020-11-21 06:43

I want to write a module where on a click of a button the camera opens and I can click and capture an image. If I don\'t like the image I can delete it and click one more i

16条回答
  •  心在旅途
    2020-11-21 06:58

    Capture photo from camera + pick image from gallery and set it into the background of layout or imageview. Here is sample code.

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    
        import android.provider.MediaStore;
        import android.util.Log;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.widget.AdapterView;
        import android.widget.AdapterView.OnItemClickListener;
        import android.widget.GridView;
        import android.widget.ImageView;
        import android.widget.LinearLayout;
    
        public class Post_activity extends Activity
        {
            final int TAKE_PICTURE = 1;
            final int ACTIVITY_SELECT_IMAGE = 2;
    
            ImageView openCameraOrGalleryBtn,cancelBtn;
            LinearLayout backGroundImageLinearLayout;
    
            public void onCreate(Bundle savedBundleInstance) {
                super.onCreate(savedBundleInstance);
                overridePendingTransition(R.anim.slide_up,0);
                setContentView(R.layout.post_activity);
    
                backGroundImageLinearLayout=(LinearLayout)findViewById(R.id.background_image_linear_layout);
                cancelBtn=(ImageView)findViewById(R.id.cancel_icon);
    
                openCameraOrGalleryBtn=(ImageView)findViewById(R.id.camera_icon);
    
    
    
                openCameraOrGalleryBtn.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
    
                        selectImage();
                    }
                });
                cancelBtn.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                    overridePendingTransition(R.anim.slide_down,0);
                    finish();
                    }
                });
    
            }
    
        public void selectImage()
            {
                 final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };
                 AlertDialog.Builder builder = new AlertDialog.Builder(Post_activity.this);
                    builder.setTitle("Add Photo!");
                    builder.setItems(options,new DialogInterface.OnClickListener() {
    
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                            if(options[which].equals("Take Photo"))
                            {
                                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                                startActivityForResult(cameraIntent, TAKE_PICTURE);
                            }
                            else if(options[which].equals("Choose from Gallery"))
                            {
                                Intent intent=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                                startActivityForResult(intent, ACTIVITY_SELECT_IMAGE);
                            }
                            else if(options[which].equals("Cancel"))
                            {
                                dialog.dismiss();
                            }
    
                        }
                    });
                    builder.show();
            }
            public void onActivityResult(int requestcode,int resultcode,Intent intent)
            {
                super.onActivityResult(requestcode, resultcode, intent);
                if(resultcode==RESULT_OK)
                {
                    if(requestcode==TAKE_PICTURE)
                    {
                        Bitmap photo = (Bitmap)intent.getExtras().get("data"); 
                        Drawable drawable=new BitmapDrawable(photo);
                        backGroundImageLinearLayout.setBackgroundDrawable(drawable);
    
                    }
                    else if(requestcode==ACTIVITY_SELECT_IMAGE)
                    {
                        Uri selectedImage = intent.getData();
                        String[] filePath = { MediaStore.Images.Media.DATA };
                        Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
                        c.moveToFirst();
                        int columnIndex = c.getColumnIndex(filePath[0]);
                        String picturePath = c.getString(columnIndex);
                        c.close();
                        Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
                        Drawable drawable=new BitmapDrawable(thumbnail);
                        backGroundImageLinearLayout.setBackgroundDrawable(drawable);
    
    
                    }
                }
            }
    
            public void onBackPressed() {
                super.onBackPressed();
                //overridePendingTransition(R.anim.slide_down,0);
            }
        }
    
    Add these permission in Androidmenifest.xml file
    
    
        
        
    

提交回复
热议问题