【问题标题】:taking multiple photos with in app camera on android programming在 Android 编程上使用应用内相机拍摄多张照片
【发布时间】:2014-11-17 12:21:57
【问题描述】:

我需要将手机的摄像头用于应用程序,但我是一名新程序员,在任何地方都找不到提供完整答案的网站。

这是我的主要活动:

公共类 MainActivity 扩展 Activity {

   private Camera cameraObject;
   private ShowCamera showCamera;
   public static Camera isCameraAvailiable(){
      Camera object = null;
      try {
         object = Camera.open(); // attempt to get a Camera instance
      }
      catch (Exception e){
        // Camera is not available (in use or does not exist)
      }
      return object; // returns null if camera is unavailable
   }

   private PictureCallback capturedIt = new PictureCallback() {

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

      Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
      if(bitmap==null){
         Toast.makeText(getApplicationContext(), "not taken", Toast.LENGTH_SHORT).show();
      }
      else
      {
         Toast.makeText(getApplicationContext(), "taken", Toast.LENGTH_SHORT).show();       
      }
      cameraObject.release();
   }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
      cameraObject = isCameraAvailiable();
      showCamera = new ShowCamera(this, cameraObject);
      FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
      preview.addView(showCamera);
}

  public void snapIt(View view){
      cameraObject.takePicture(null, null, capturedIt);
   }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

【问题讨论】:

  • 您可以运行一个循环,在一定时间后多次调用cameraObject.takePicture(null, null, capturedIt);
  • 或者,您可以为您的showCamera 对象使用触摸处理程序,该对象在内部调用您的snapIt 方法。
  • 如果我有另一个按钮,如果我想拍一张新照片,你能给出更详细的答案吗?它会重新开始整个过程​​。
  • 如果你想一键连拍,见How to make burst mode available to Camera

标签: android camera


【解决方案1】:

创建一个具有 Layout 的 Fragment 来接收正在使用的图像(可以是仅用于最后一个的 ImageView,可以是包含所有拍摄照片的 GridView,w/e 对您的应用程序更有意义)并使用“新图片”按钮。然后,您只需将 onClickListener 添加到再次调用相机 Activity 的 Button 并将照片添加到您计划存储它们的位置。然后在你拍照时调用那个 Fragment(当他拍照时在回调中)并获利!

【讨论】:

  • 谢谢,除了让我拍摄新照片的按钮外,其他所有功能都可以使用,如何重新启动相机预览?
  • 对调用您的 snapIt 函数的活动进行回调
【解决方案2】:

请检查此链接 http://developer.android.com/training/camera/photobasics.html 它将允许打开设备的默认摄像头。

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多