如何在mainactivity中获取recyclerview图像数据 [英] How to get recyclerview image data in mainactivity

查看:74
本文介绍了如何在mainactivity中获取recyclerview图像数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做的是从图库和照相机中获取图像并将其放在recyclerview中. 现在主要部件在图像放置到recyclerview之后, 但是谁能告诉我,仅当我单击上传按钮时,如何才能将recyclerview中显示的这些图像恢复回mainActivity.

What i am trying to do is getting images from gallery and camera and placing it in an recyclerview. Now main parts comes after image is now placedd in the recyclerview , but can anyone just tell me how can i get back these images shown in the recyclerview back to the mainActivity only when i click my upload button.

谢谢.

我的主要活动.

package www.welkinfort.com.pphc;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import butterknife.ButterKnife;

public class XenImageUploading extends AppCompatActivity implements AdapterView.OnItemSelectedListener, View.OnClickListener {
    ArrayAdapter<String> des_dataAdapter;
    ArrayList<String> discription_list = new ArrayList<>();
    //@BindView(R.id.selct_prject_spinner)
    Spinner select_pro_spn;
    TextView datetextTextView;
    Calendar myCalendar;
    static Bitmap rotatedBitmap;
    static Bitmap finalrotatedBitmap;
    DatePickerDialog.OnDateSetListener date;
    static final int REQUEST_TAKE_PHOTO = 1;
    private int SELECT_FILE = 2;
    private static String bitmap_overdraw_str;
    private static ImageButton cameraclick;
    private static ImageButton galleryclick;
    private static ImageButton videoclick;
    private static String mCurrentPhotoPath;
    private static RecyclerView recyclerView;
    ArrayList<Data_Model> arrayList;
    ImageView image_view;
    MyAdapter m;
    Bitmap finalbitmap;
    static String clickpath;
    int i = 0;
    String path ;
    private static final String TAG = "XenImageUploading";
    static File photoFile_1 = null;
    private String userChoosenTask;
    private Uri fileUri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xen_image_upload);
        ButterKnife.bind(this);
        setTitle("XEN IMAGE UPLOAD");
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        cameraclick = (ImageButton) findViewById(R.id.camera_btn);
        galleryclick = (ImageButton) findViewById(R.id.gallery_btn);
        image_view = (ImageView) findViewById(R.id.image_view);
        arrayList = new ArrayList<>();
        Log.d("oncreate", "set adapter");

        bitmap_overdraw_str = "Lat:" + "aaaaaaaa" + "\nLong:" + "aaaaaaaa" + "\nDate:" + "aaaaaaaa";
        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
        ///////////////////////////////////////////////////////////////////
        //select_pro_spn = (Spinner) findViewById(R.id.selct_prject_spinner);
        //datetextTextView = (TextView) findViewById(R.id.selctdate__txtv);
        discription_list.add("Traffic light broken/not working");
        discription_list.add("Traffic light pole hit by vehicle");
        discription_list.add("No electricity connection");
        discription_list.add("Traffic light not visible/partially visible");
//        select_pro_spn.setOnItemSelectedListener(this);
        // Creating adapter for spinner
        des_dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, discription_list);
        // Drop down layout style - list view with radio button
        des_dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // attaching data adapter to spinner
//        select_pro_spn.setAdapter(des_dataAdapter);
        myCalendar = Calendar.getInstance();
        date = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                                  int dayOfMonth) {
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateLabel();
            }
        };
//        datetextTextView.setOnClickListener(new View.OnClickListener() {
//
//            @Override
//            public void onClick(View v) {
//                // TODO Auto-generated method stub
//                new DatePickerDialog(XenImageUploading.this, date, myCalendar
//                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
//                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
//            }
//        });

        cameraclick.setOnClickListener(this);
        galleryclick.setOnClickListener(this);
        recyclerView.setOnClickListener(this);
    }

    private void updateLabel() {
        String myFormat = "MM-dd-yyyy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
        datetextTextView.setText(sdf.format(myCalendar.getTime()));
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        switch (parent.getId()) {
//            case R.id.selct_prject_spinner:
//                String selected_intersection = parent.getSelectedItem().toString();
//                Log.e("Selected item ", selected_intersection);
//                //parent.notifyAll();
//                break;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.camera_btn:
                selectImage();
                break;
            case R.id.recycler_view:
               getImageall();
                break;
            case R.id.gallery_btn:
                Intent i = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                i.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                i.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(i, SELECT_FILE);
                break;
        }
    }

    private void getImageall() {

    }

    private void selectImage() {
        takepicture();
    }


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

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


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

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

        if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK && null != data) {
            // 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);
            ////////////////setting image to adapter on capturing///////////////////////////
            clickpath = mCurrentPhotoPath;
            Bitmap bitmap = BitmapUtility.decodeSampledBitmapFromResource(clickpath, 560, 300);
            setCameraDisplayOrientation(bitmap);
            try {
                FileOutputStream fos = new FileOutputStream(photoFile_1);
                finalrotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
                fos.close();
            } catch (FileNotFoundException e) {
                Log.d(TAG, "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.d(TAG, "Error accessing file: " + e.getMessage());
            }
            Data_Model data_model = new Data_Model();
            data_model.setImage(finalrotatedBitmap);
            image_view.setImageBitmap(finalrotatedBitmap);
            arrayList.add(data_model);
            m = new MyAdapter(this, arrayList);
            recyclerView.setAdapter(m);
            m.notifyDataSetChanged();
        }
        if (requestCode == SELECT_FILE && resultCode == RESULT_OK && null != data) {
            InputStream stream = null;
            Uri uri = data.getData();
            //for (int i =0 ; i<numberOfImages ;i++){
                getImagePath(uri);
                Data_Model data_model = new Data_Model();
                data_model.setImage(finalbitmap);
                image_view.setImageBitmap(finalbitmap);
                arrayList.add(data_model);
                m = new MyAdapter(this, arrayList);
                recyclerView.setAdapter(m);
                m.notifyDataSetChanged();
           // }
        }
    }

    public String getImagePath(Uri uri) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        String document_id = cursor.getString(0);
        document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
        cursor.close();

        cursor = getContentResolver().query(
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
        cursor.moveToFirst();
        path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();

        finalbitmap = BitmapUtility.decodeSampledBitmapFromResource(path, 560, 300);
        //targetImage = (ImageView)findViewById(R.id.imageView1);
        image_view.setImageBitmap(finalbitmap);
        return path;
    }

    public static void setCameraDisplayOrientation(Bitmap fileresult) {
        Log.e(TAG, "setCameraDisplayOrientation");
        BitmapFactory.Options bounds = new BitmapFactory.Options();
        bounds.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(clickpath, bounds);
        BitmapFactory.Options opts = new BitmapFactory.Options();
        Bitmap bm = BitmapFactory.decodeFile(clickpath, opts);
        ExifInterface exif = null;
        try {
            exif = new ExifInterface(clickpath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
        int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL;

        int rotationAngle = 0;
        if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90;
        if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180;
        if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270;

        Matrix matrix = new Matrix();
        matrix.setRotate(rotationAngle, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
        rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bounds.outWidth, bounds.outHeight, matrix, true);
        finalrotatedBitmap = AddTextonBitmap.textAsBitmap(rotatedBitmap, bitmap_overdraw_str);
    }

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

适配器类 包www.welkinfort.com.pphc;

Adapter class package www.welkinfort.com.pphc;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.ArrayList;

/**
 * Created by Admin on 13-Jul-17.
 */

class MyAdapter extends RecyclerView.Adapter<MyAdapter.Myviewholder> {
    private static final String TAG = "Adapter";
    static Data_Model m;
    XenImageUploading xenImageUploading;
    ArrayList<Data_Model> arrayList;
    private Context mContext;

    public MyAdapter(XenImageUploading xenImageUploading, ArrayList<Data_Model> arrayList) {
        this.arrayList = arrayList;
        this.xenImageUploading = xenImageUploading;
    }

    @Override
    public Myviewholder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.abc, parent, false);
        Myviewholder myviewholder = new Myviewholder(view);
        Log.d("myactivty ", "oncreateViewHolder");

        return myviewholder;
    }

    @Override
    public void onBindViewHolder(final Myviewholder holder, final int position) {
        m = arrayList.get(position);
        Log.d(" myactivty", "onBindviewholder" + position);
        holder.imageView.setImageBitmap(m.getImage());

    }
    @Override
    public int getItemCount() {
        return arrayList == null ? 0 : arrayList.size();
    }

    public class Myviewholder extends RecyclerView.ViewHolder {
       // public  View view;
        public ImageView imageView;

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

        }
    }
}

推荐答案

尝试在适配器中像这样创建一个方法

  public ArrayList<Data_Model> getArray() {
    return arrayList;
}

现在在您的按钮上单击,只需调用此方法

 upload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ArrayList<Data_Model> arrayList= adapter.getArray();
        }
    });

如有任何疑问,请问我

这篇关于如何在mainactivity中获取recyclerview图像数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆