In Android App..Click an image From camera using button click and show all the clicked image into horizontal scrolling view dynamically at small area in activity not whole activity like gallery view but dont want to use gallery and onlongpressed on a particuler image show a dialog to delete it.

1

There are 1 answers

2
Mohit On BEST ANSWER

i have develop the solution..

        MainActivity.java
     package com.example.mtk.recyclerviewdemo;

    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.net.Uri;
    import android.os.Environment;
    import android.provider.ContactsContract;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import android.widget.Toast;

    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;

    import static android.provider.MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE;
    import static android.provider.MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
    import static android.support.v4.app.ActivityCompat.startActivityForResult;

    public class MainActivity extends AppCompatActivity {

        static final int REQUEST_TAKE_PHOTO = 1;
        private int SELECT_FILE = 2;
        private static Button btnclick;
        private String mCurrentPhotoPath;
        private static RecyclerView recyclerView;
        ArrayList<Data_Model> arrayList;
        String chkpath = null;
        MyAdapter m;
        int i = 0;
        private String userChoosenTask;
        private Uri fileUri; // file url to store image/video

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            btnclick = (Button) findViewById(R.id.click);
            recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

            arrayList = new ArrayList<>();
            m = new MyAdapter();
            Log.d("oncreate", "set adapter");
            recyclerView.setAdapter(m);
            ViewGroup.LayoutParams params = recyclerView.getLayoutParams();
            params.height = 200;
            recyclerView.setLayoutParams(params);
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
            recyclerView.setLayoutManager(linearLayoutManager);


            //Camera Click image
            btnclick.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    selectImage();

                }
            });


        }

        public void takepicture() {
            Log.d("Cameraclick", "takepicture");

            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                } catch (IOException ex) {
                    // Error occurred while creating the File
                }
                // Continue only if the File was successfully created
                if (photoFile != null) {
                    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                            Uri.fromFile(photoFile));
                    startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
                }
            }
        }

        private File createImageFile() throws IOException {
            // Create an image file name
            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            String imageFileName = "JPEG_" + timeStamp + "_";
            File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
            File image = File.createTempFile(
                    imageFileName,  /* prefix */
                    ".jpg",         /* suffix */
                    storageDir      /* directory */
            );

            // Save a file: path for use with ACTION_VIEW intents
            mCurrentPhotoPath = image.getAbsolutePath();
            return image;


        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            if (resultCode == RESULT_OK) {
                if (requestCode == REQUEST_TAKE_PHOTO) {

                    // Save Image To Gallery
                    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                    File f = new File(mCurrentPhotoPath);
                    Uri contentUri = Uri.fromFile(f);
                    mediaScanIntent.setData(contentUri);
                    this.sendBroadcast(mediaScanIntent);
                    String clickpath = mCurrentPhotoPath;
                    Data_Model data_model = new Data_Model();
                    data_model.setImage(clickpath);
                    arrayList.add(data_model);
                    m.notifyDataSetChanged();


                } else if (requestCode == SELECT_FILE) {
                    Log.d("gallery", "checkpointd");
                    onSelectFromGalleryResult(data);
                }
            }

        }


        class MyAdapter extends RecyclerView.Adapter<MyAdapter.Myviewholder> {

            @Override
            public Myviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
                View v = getLayoutInflater().inflate(R.layout.item_rowchk, parent, false);
                Myviewholder myviewholder = new Myviewholder(v);
                Log.d("myactivty ", "oncreateViewHolder");

                return myviewholder;
            }

            @Override
            public void onBindViewHolder(Myviewholder holder, final int position) {
                final Data_Model m = arrayList.get(position);
                Log.d(" myactivty", "onBindviewholder" + position);
                //holder.imageView.setVisibility(View.VISIBLE);
                // bimatp factory
                BitmapFactory.Options options = new BitmapFactory.Options();
                // downsizing image as it throws OutOfMemory Exception for larger
                // images
                options.inSampleSize = 20;
                final Bitmap bitmap = BitmapFactory.decodeFile(m.getImage(), options);
                holder.imageView.setImageBitmap(bitmap);
                holder.imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(getApplicationContext(), ImageDisplay.class);
                        String chkpath = m.getImage();
                        intent.putExtra("path", chkpath);
                        Log.d("intent", "new activity");
                        startActivity(intent);
                    }
                });
                holder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View view) {

                        final int pst = position;
                        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                switch (which) {
                                    case DialogInterface.BUTTON_POSITIVE:
                                        arrayList.remove(position);
                                        notifyItemRemoved(position);
                                        notifyItemRangeChanged(position, arrayList.size());
                                        // Yes button clicked
                                        Toast.makeText(MainActivity.this, "Yes Clicked",
                                                Toast.LENGTH_LONG).show();
                                        break;

                                    case DialogInterface.BUTTON_NEGATIVE:
                                        // No button clicked
                                        // do nothing
                                        Toast.makeText(MainActivity.this, "No Clicked",
                                                Toast.LENGTH_LONG).show();
                                        break;
                                }
                            }
                        };

                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setMessage("Are you sure want to Delete ?")
                                .setPositiveButton("Yes", dialogClickListener)
                                .setNegativeButton("No", dialogClickListener).show();

                        return true;
                    }
                });


            }

            @Override
            public int getItemCount() {
                return arrayList.size();
            }

            public class Myviewholder extends RecyclerView.ViewHolder {
                public ImageView imageView;

                public Myviewholder(View itemView) {
                    super(itemView);
                    imageView = (ImageView) itemView.findViewById(R.id.image);
                }
            }
        }

        private void onSelectFromGalleryResult(Intent data) {

            Uri selectedImageUri = data.getData();
            String[] projection = {MediaStore.Images.Media.DATA};
            Cursor cursor = managedQuery(selectedImageUri, projection, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            String path = cursor.getString(column_index);
            Data_Model data_model = new Data_Model();
            data_model.setImage(path);
            arrayList.add(data_model);
            m.notifyDataSetChanged();
            // Toast.makeText(this, "" + path, Toast.LENGTH_LONG).show();
        }

        private void selectImage() {

            final CharSequence[] items = {"Take Photo", "Choose from Library",
                    "Cancel"};

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Add Photo!");
            builder.setItems(items, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    boolean result = Utility.checkPermission(MainActivity.this);

                    if (items[item].equals("Take Photo")) {
                        userChoosenTask = "Take Photo";
                        if (result)
                            takepicture();

                    } else if (items[item].equals("Choose from Library")) {
                        userChoosenTask = "Choose from Library";
                        if (result)
                            galleryIntent();


                    } else if (items[item].equals("Cancel")) {
                        dialog.dismiss();
                    }
                }
            });
            builder.show();
        }


        public void galleryIntent() {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            Log.d("gallery", "checkpointA");
            startActivityForResult(Intent.createChooser(intent, "Select File"), SELECT_FILE);
            Log.d("gallery", "checkpointB");
        }
}

        Data_Model.Java
    package com.example.mtk.recyclerviewdemo;

    import android.net.Uri;


    public class Data_Model {
        private String image;


        // Getter and Setter model for recycler view items

        public String getImage() {
            return image;
        }

        public void setImage(String image) {
            this.image = image;
        }


    }
        ImageDisplay.java

    package com.example.mtk.recyclerviewdemo;

    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.ImageView;

    public class ImageDisplay extends AppCompatActivity {
     ImageView imageView;
        private  String path;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_image_display);
            imageView = (ImageView) findViewById(R.id.imageviewnew);
            //setupActionBar();

            // Get Image Path
            path = getIntent().getExtras().getString("path");

            // Get Image
            BitmapFactory.Options bmOptions = new BitmapFactory.Options();
            bmOptions. inJustDecodeBounds = false;
            bmOptions. inSampleSize = 4;
            bmOptions. inPurgeable = true ;
            Bitmap bitmap = BitmapFactory.decodeFile(path, bmOptions);

            // Display Image
            imageView.setImageBitmap(bitmap);
        }
    }



     xml.files

    activity_image_display.xml
    activity_main.xml
    item_row.xml
    item_rowchk.xml

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.mtk.recyclerviewdemo.MainActivity"
        android:weightSum="1">

        <Button
            android:id="@+id/click"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="10dp"
            android:text="CLICK"
            android:background="#fabdca"
            android:textSize="27sp" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="20dp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="BUTTON CHECK"/>


    </LinearLayout>

item_rowchk.xml

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

    <ImageView
        android:id="@+id/image"
        android:rotation="90"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Imagedisplay.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_image_display"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.mtk.recyclerviewdemo.ImageDisplay">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rotation="90"
    android:id="@+id/imageviewnew" />

</LinearLayout>