Search code examples
imageandroid-viewpagerandroid-recyclerviewhorizontal-scrolling

in Android to show camera clicked images in horizontal scrolling view and into view dynamically.when u ckicked add into view


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.


Solution

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