0

Я читаю примеры Anywall и MealSpotter для Parse.com и задавался вопросом, как я собираюсь объединить некоторые из их функций. Например, как мне взять и сохранить изображения вместо простого ввода текста в сообщениях для примера Anywall? Создать новый класс CameraFragment или создать другие классы?Как взять и сохранить фотографии на Parse с Anywall?

ответ

2

Я создал приложение для своего колледжа после приложения MealSpotter.

Создать класс, который расширяет ParseObject с добытчиками и сеттеров

public ParseFile getPhotoFile() { 
    return getParseFile("photo"); 
} 

public void setPhotoFile(ParseFile file) { 
    put("photo", file); 
} 

Затем создайте класс CamaraFragment

public class CameraFragment extends Fragment { 

public static final String TAG = "CameraFragment"; 

private Camera camera; 
private SurfaceView surfaceView; 
private ParseFile photoFile; 
private ActionButton photoButton; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_camera, parent, false); 

    photoButton = (ActionButton) v.findViewById(R.id.camera_photo_button); 

    if (camera == null) { 
     try { 
      camera = Camera.open(); 
      photoButton.setEnabled(true); 
     } catch (Exception e) { 
      Log.e(TAG, "No camera with exception: " + e.getMessage()); 
      photoButton.setEnabled(false); 
      Toast.makeText(getActivity(), "No camera detected", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 

    photoButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (camera == null) 
       return; 
      camera.takePicture(new Camera.ShutterCallback() { 

       @Override 
       public void onShutter() { 
        // nothing to do 
       } 

      }, null, new Camera.PictureCallback() { 

       @Override 
       public void onPictureTaken(byte[] data, Camera camera) { 
        saveScaledPhoto(data); 
       } 

      }); 

     } 
    }); 

    surfaceView = (SurfaceView) v.findViewById(R.id.camera_surface_view); 
    SurfaceHolder holder = surfaceView.getHolder(); 
    holder.addCallback(new Callback() { 

     public void surfaceCreated(SurfaceHolder holder) { 
      try { 
       if (camera != null) { 
        camera.setDisplayOrientation(90); 
        camera.setPreviewDisplay(holder); 
        camera.startPreview(); 
       } 
      } catch (IOException e) { 
       Log.e(TAG, "Error setting up preview", e); 
      } 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, 
       int width, int height) { 
      // nothing to do here 
     } 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      // nothing here 
     } 

    }); 

    return v; 
} 

/* 
* ParseQueryAdapter loads ParseFiles into a ParseImageView at whatever size 
* they are saved. Since we never need a full-size image in our app, we'll 
* save a scaled one right away. 
*/ 
private void saveScaledPhoto(byte[] data) { 

    // Resize photo from camera byte array 
    Bitmap bookImage = BitmapFactory.decodeByteArray(data, 0, data.length); 
    // Trabajar con la foto aqui 
    int h = bookImage.getHeight(); 
    int w = bookImage.getWidth(); 
    Bitmap bookImageScaled = Bitmap.createScaledBitmap(bookImage, 200, 200//800, 800 
      * bookImage.getHeight()/bookImage.getWidth(), false); 

    // Override Android default landscape orientation and save portrait 
    Matrix matrix = new Matrix(); 
    matrix.postRotate(90); 

    Bitmap rotatedScaledBookImage = Bitmap.createBitmap(bookImageScaled, 0, 
      0, bookImageScaled.getWidth(), bookImageScaled.getHeight(), 
      matrix, true); 
    /*Bitmap rotatedScaledBookImage = Bitmap.createBitmap(bookImage,0,0,bookImage.getWidth(),bookImage.getHeight(),matrix,true);*/ 

    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    rotatedScaledBookImage.compress(Bitmap.CompressFormat.JPEG, 100, bos); 

    byte[] scaledData = bos.toByteArray(); 

    // TEST SCALED DATA -> DATA 

    // Save the scaled image to Parse 
    photoFile = new ParseFile("book_photo.jpg", scaledData); 
    photoFile.saveInBackground(new SaveCallback() { 

     public void done(ParseException e) { 
      if (e != null) { 
       Toast.makeText(getActivity(), 
         "Error saving: " + e.getMessage(), 
         Toast.LENGTH_LONG).show(); 
      } else { 
       addPhotoToSaleAndReturn(photoFile); 
      } 
     } 
    }); 
} 

/* 
* Once the photo has saved successfully, we're ready to return to the 
* NewbookFragment. When we added the CameraFragment to the back stack, we 
* named it "NewMealFragment". Now we'll pop fragments off the back stack 
* until we reach that Fragment. 
*/ 
private void addPhotoToSaleAndReturn(ParseFile photoFile) { 
    //((SaleFragment) getActivity()).getCurrentSale().setPhotoFile(photoFile); 
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Testttttttttttttt 
    SaleFragment.getCurrentSale().setPhotoFile(photoFile); 
    FragmentManager fm = getActivity().getSupportFragmentManager(); 
    fm.popBackStack("NewSaleFragment", 
      FragmentManager.POP_BACK_STACK_INCLUSIVE); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (camera == null) { 
     try { 
      camera = Camera.open(); 
      photoButton.setEnabled(true); 
     } catch (Exception e) { 
      Log.i(TAG, "No camera: " + e.getMessage()); 
      photoButton.setEnabled(false); 
      Toast.makeText(getActivity(), "No camera detected", 
        Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

@Override 
public void onPause() { 
    if (camera != null) { 
     camera.stopPreview(); 
     camera.release(); 
    } 
    super.onPause(); 
} 

Наконец, сохранить объект в той деятельности, которую вы предпочитаете r

// Save the sale and return 
         sale.saveInBackground(new SaveCallback() { 

          @Override 
          public void done(ParseException e) { 
           if (e == null) { 
             getActivity().setResult(Activity.RESULT_OK);           

           } 
           else { 
             Toast.makeText(
               getActivity().getApplicationContext(), 
               "Error saving: " + e.getMessage(), 
               Toast.LENGTH_SHORT).show(); 
           } 
          } 

         }); 
Смежные вопросы