I wrote code to work with a custom camera, and for this I use SurfaceView, now I want to know that if I need to implement the Zoom IN and OUT functions, I never worked on this application.
My code that I used to create a custom camera is below:
MainActivity.java: -
public class MainActivity extends Activity { private SurfaceView preview=null; private SurfaceHolder previewHolder=null; public Camera camera ; private boolean inPreview=false; ImageButton btnCapture; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); preview=(SurfaceView)findViewById(R.id.surface); previewHolder=preview.getHolder(); previewHolder.addCallback(surfaceCallback); previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); previewHolder.setFixedSize(getWindow().getWindowManager() .getDefaultDisplay().getWidth(), getWindow().getWindowManager() .getDefaultDisplay().getHeight()); btnCapture = (ImageButton) findViewById(R.id.btnCapture); btnCapture.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "Capture Image(s)", Toast.LENGTH_LONG).show(); } }); } @Override public void onResume() { super.onResume(); camera=Camera.open(); } @Override public void onPause() { super.onPause(); if (inPreview) { camera.stopPreview(); } camera.release(); camera=null; inPreview=false; } private Camera.Size getBestPreviewSize(int width, int height,Camera.Parameters parameters){ Camera.Size result=null; for (Camera.Size size : parameters.getSupportedPreviewSizes()) { if (size.width<=width && size.height<=height) { if (result==null) { result=size; } else { int resultArea=result.width*result.height; int newArea=size.width*size.height; if (newArea>resultArea) { result=size; } } } } return(result); } SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback(){ public void surfaceCreated(SurfaceHolder holder) { try { camera.setPreviewDisplay(previewHolder); } catch (Throwable t) { Log.e("PreviewDemo-surfaceCallback", "Exception in setPreviewDisplay()", t); Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_LONG).show(); } } public void surfaceChanged(SurfaceHolder holder,int format, int width,int height) { Camera.Parameters parameters=camera.getParameters(); Camera.Size size=getBestPreviewSize(width, height, parameters); if (size!=null) { parameters.setPreviewSize(size.width, size.height); camera.setParameters(parameters); camera.startPreview(); inPreview=true; } } public void surfaceDestroyed(SurfaceHolder holder) { } }; }
activity_main.xml: -
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/splash_background" > <android.view.SurfaceView android:id="@+id/surface" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ImageButton android:id="@+id/btnCapture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@drawable/capture" android:contentDescription="@string/app_name" /> </RelativeLayout>
source share