android take multiple image with camera

后端 未结 1 1835
感动是毒
感动是毒 2021-01-19 23:43

I\'ve already made a code for capturing an image using device built-in camera and archiving it in the database server. For each time I captures an image and views it, it wil

相关标签:
1条回答
  • 2021-01-20 00:14

    Ok now i think i understand your problem. To understand my code check this:

    what is sharedPreferences?

    Show Image View from file path in android?

    Create ImageViews dynamically inside a loop

    Last Edit: add commit() solve the problem

    What we are going to try is save the file paths in ArrayList and save this array in a SharedPreferences:

    layout_example.xml <-- create a Layout on your xml to add imageViews inside

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:padding="5dp">
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:id="@+id/myLinearLayout"></LinearLayout>
    </RelativeLayout>
    

    UploadActivity.java

         Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upload);//add the LinearLayout of the layout_example.xml
    
        txtPercentage = (TextView) findViewById(R.id.txtPercentage);
        btnUpload = (Button) findViewById(R.id.btnUpload);
        layout = (LinearLayout) findViewById(R.id.ly1);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        imgPreview = (ImageView) findViewById(R.id.imgPreview);
    
        addImageView(layout);
    
        // Changing action bar background color
        getActionBar().setBackgroundDrawable(
                new ColorDrawable(Color.parseColor(getResources().getString(
                        R.color.action_bar))));
    
        // Receiving the data from previous activity
        Intent i = getIntent();
    
        // image or video path that is captured in previous activity
        filePath = i.getStringExtra("filePath");
    
       LinearLayour ly_myLayout = (LinearLayout)findViewById(R.id.myLinearLayout);
       ArrayList<String> yourFilePaths = new ArrayList<>();//Create ArrayList
    
        //first you have to check if you've saved filepaths
        SharedPreferences prefs = getSharedPreferences("SavedFilePaths",   Context.MODE_PRIVATE);
        String myJSONArrayString = prefs.getString("SavedFilePathsJSONArray", "");
        if(!myJSONArrayString.isEmpty()){
        JSONArray jsonArray = new JSONArray(myJSONArrayString);
          for (int i=0;i<jsonArray.length();i++){ 
            yourFilePaths.add(jsonArray.get(i).toString());
           } 
        }
        //add the last photo you've taken
         yourFilePaths.add(filePath);
    
        //Save the new ArrayList in SharedPreferences:
         JSONArray mJSONArray = new JSONArray(yourFilePaths);
         SharedPreferences.Editor editor = prefs.edit();
         editor.putString("SavedFilePathsJSONArray",mJSONArray.toString()).commit(); // add commit
    
        //Show images by filePaths             
        File imgFile;
          for (int i = 0; i < yourFilePaths.size(); ++i) {
            imgFile = new  File(yourFilePaths.get(i));
            if(imgFile.exists()){
    
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    
            ImageView myImage = new ImageView(this);
    
            myImage.setImageBitmap(myBitmap);// In this step you've to create dynamic imageViews to see more than one picture
    
            ly_myLayout.addView(myImage);//Then add your dynamic imageviews to your layout
    
            }
          }
    
        btnUpload.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // uploading the file to server
                new UploadFileToServer().execute();
            }
        });
    
    }
    
    /**
     * Displaying captured image/video on the screen
     * */
    private void previewMedia(boolean isImage) {
        // Checking whether captured media is image or video
        if (isImage) {
            imgPreview.setVisibility(View.VISIBLE);
            vidPreview.setVisibility(View.GONE);
            // bimatp factory
            BitmapFactory.Options options = new BitmapFactory.Options();
    
            // down sizing image as it throws OutOfMemory Exception for larger
            // images
            options.inSampleSize = 8;
    
            final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
    
            imgPreview.setImageBitmap(bitmap);
    
        } 
    }
    
        private void addImageView(LinearLayout layout) {
        i = 0;
        ImageView imageView = new ImageView(this);
        imageView.setImageResource(R.drawable.ic_launcher);
        imageView.setId(i);
        layout.addView(imageView);
        imageView.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(UploadActivity.this,
                        MainActivity.class);
                startActivity(intent);
            }
        });
    }
    

    Solve your problem?

    0 讨论(0)
提交回复
热议问题