title: How to zoom camera using Android CameraX API?
body: <p>I have tried to zoom camera with below code using <code>CameraX</code>.</p>
  
  <p>First I get a <code>Preview</code> from <code>CameraX</code> and tried to perform zoom using <code>Preview</code> like below.</p>
  
  <pre><code>var config = CameraX.getDefaultUseCaseConfig(PreviewConfig::class.java, lensFacing)
  var preview = Preview(config)
  preview.zoom(zoom)
  </code></pre>
  
  <p>After <code>preview.zoom()</code> I just bind again with <code>CameraX</code> and get some error and it's not working.</p>
  
  <pre><code>CameraX.bindToLifecycle(this, preview, imageCapture, videoCapture)
  </code></pre>
  
  <p>When the above code was not working, I tried with <code>CameraX.unbindAll()</code> first and then I call <code>CameraX.bindToLifecycle()</code>. But face some error again and not get success in zoom.</p>
  
  <p><strong>Let me know how we can zoom the camera using <code>CameraX</code> API.</strong></p>
  
  <blockquote>
    <p><strong>Update error log below:</strong></p>
  </blockquote>
  
  <p><strong>Error log using only <code>CameraX.bindToLifecycle()</code>:</strong></p>
  
  <pre><code>java.lang.IllegalArgumentException: Exceeded max simultaneously bound image capture use cases.
     at androidx.camera.camera2.impl.UseCaseSurfaceOccupancyManager.checkUseCaseLimitNotExceeded(UseCaseSurfaceOccupancyManager.java:61)
     at androidx.camera.camera2.impl.Camera2DeviceSurfaceManager.getSuggestedResolutions(Camera2DeviceSurfaceManager.java:146)
     at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:449)
     at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:144)
     at com.android.example.cameraxbasic.fragments.CameraFragment$updateCameraUi$2.onTouch(CameraFragment.kt:408)
     at android.view.View.dispatchTouchEvent(View.java:12512)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3032)
     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
     at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:475)
     at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1836)
     at android.app.Activity.dispatchTouchEvent(Activity.java:3404)
     at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
     at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:433)
     at android.view.View.dispatchPointerEvent(View.java:12755)
     at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5150)
     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4953)
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4470)
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4523)
     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4489)
     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4629)
     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4497)
     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4686)
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4470)
     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4523)
     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4489)
     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4497)
     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4470)
     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7192)
     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7126)
     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7087)
     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7295)
     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:193)
     at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
     at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:184)
     at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:7266)
     at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7318)
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
     at android.view.Choreographer.doCallbacks(Choreographer.java:761)
     at android.view.Choreographer.doFrame(Choreographer.java:690)
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
     at android.os.Handler.handleCallback(Handler.java:873)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:193)
     at android.app.ActivityThread.main(ActivityThread.java:6912)
     at java.lang.reflect.Method.invoke(Native Method)
     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
  </code></pre>
  
  <p><strong>Error log using <code>CameraX.unbindAll()</code> and <code>CameraX.bindToLifecycle()</code>:</strong></p>
  
  <pre><code>   E/Legacy-CameraDevice-JNI: getNativeWindow: Surface had no valid native window.
     E/Legacy-CameraDevice-JNI: LegacyCameraDevice_nativeDetectSurfaceDimens: Could not retrieve native window from surface.
  
  --------- beginning of crash
     2019-05-09 16:49:29.155 31123-31144/com.android.example.cameraxbasic E/AndroidRuntime: FATAL EXCEPTION: CameraX-
  Process: com.android.example.cameraxbasic, PID: 31123
  java.lang.IllegalArgumentException: Surface was abandoned
      at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:84)
      at android.hardware.camera2.params.OutputConfiguration.&lt;init&gt;(OutputConfiguration.java:260)
      at android.hardware.camera2.params.OutputConfiguration.&lt;init&gt;(OutputConfiguration.java:145)
      at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:518)
      at androidx.camera.camera2.impl.CaptureSession.open(CaptureSession.java:196)
      at androidx.camera.camera2.impl.Camera.openCaptureSession(Camera.java:535)
      at androidx.camera.camera2.impl.Camera$StateCallback.onOpened(Camera.java:743)
      at androidx.camera.core.CameraDeviceStateCallbacks$ComboDeviceStateCallback.onOpened(CameraDeviceStateCallbacks.java:99)
      at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:152)
      at android.os.Handler.handleCallback(Handler.java:873)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loop(Looper.java:193)
      at android.os.HandlerThread.run(HandlerThread.java:65)
   Caused by: android.hardware.camera2.legacy.LegacyExceptionUtils$BufferQueueAbandonedException
      at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:73)
      at android.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceSize(LegacyCameraDevice.java:606)
      at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:82)
      at android.hardware.camera2.params.OutputConfiguration.&lt;init&gt;(OutputConfiguration.java:260) 
      at android.hardware.camera2.params.OutputConfiguration.&lt;init&gt;(OutputConfiguration.java:145) 
      at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:518) 
      at androidx.camera.camera2.impl.CaptureSession.open(CaptureSession.java:196) 
      at androidx.camera.camera2.impl.Camera.openCaptureSession(Camera.java:535) 
      at androidx.camera.camera2.impl.Camera$StateCallback.onOpened(Camera.java:743) 
      at androidx.camera.core.CameraDeviceStateCallbacks$ComboDeviceStateCallback.onOpened(CameraDeviceStateCallbacks.java:99) 
      at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:152) 
      at android.os.Handler.handleCallback(Handler.java:873) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:193) 
      at android.os.HandlerThread.run(HandlerThread.java:65) 
  
  
  --------- beginning of system
  </code></pre>