Search code examples
androidcamerazoomingparameters

"params cannot be resolved to a variable" while trying to get Camera Parameters


I'm new to android and I'm trying to make an app that accesses the camera with zoom and an overlay. To implement zoom I used this: add Zoom controls of Camera in Camera

I've tried to initialize "params" using this: Zoom In & Out Custom Camera - Null Pointer Exception

After initialising params in the constructor I still get the error "params cannot be resolved to a variable" Have I missed something? Any help would be greatly appreciated.

MainActivity.java

package com.reidbailey.droidscope;

import java.io.IOException;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ZoomControls;


public class MainActivity extends Activity implements SurfaceHolder.Callback{

Camera camera;
int currentZoomLevel = 0, maxZoomLevel = 0;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
boolean cameraview = false;
LayoutInflater inflater = null;


 /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

         getWindow().setFormat(PixelFormat.UNKNOWN);
         surfaceView = (SurfaceView)findViewById(R.id.cameraview);
         surfaceHolder = surfaceView.getHolder();
         surfaceHolder.addCallback(this);
         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

         inflater = LayoutInflater.from(getBaseContext());
         View view = inflater.inflate(R.layout.overlay, null);
         LayoutParams layoutParamsControl= new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
         this.addContentView(view, layoutParamsControl);

        }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {

        // TODO Auto-generated method stub
        if(cameraview){
        camera.stopPreview();
        cameraview = false;
        }   

        if (camera != null){
        try {
        camera.setPreviewDisplay(surfaceHolder);
        camera.startPreview();
        cameraview = true;
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
                }
            }
        ZoomControls zoomControls = (ZoomControls) findViewById(R.id.CAMERA_ZOOM_CONTROLS);
        params = camera.getParameters();
        if(params.isZoomSupported()){    
        maxZoomLevel = params.getMaxZoom();

        zoomControls.setIsZoomInEnabled(true);
            zoomControls.setIsZoomOutEnabled(true);

            zoomControls.setOnZoomInClickListener(new OnClickListener(){
                public void onClick(View v){
                        if(currentZoomLevel < maxZoomLevel){
                            currentZoomLevel++;
                            camera.startSmoothZoom(currentZoomLevel);
                        }
                }
            });

        zoomControls.setOnZoomOutClickListener(new OnClickListener(){
                public void onClick(View v){
                        if(currentZoomLevel > 0){
                            currentZoomLevel--;
                            camera.startSmoothZoom(currentZoomLevel);
                        }
                }
            });    
       }
       else
         zoomControls.setVisibility(View.GONE);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        camera = Camera.open();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    camera.stopPreview();
    camera.release();
    camera = null;
    cameraview = false;
    }
    }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <SurfaceView
        android:id="@+id/cameraview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <ZoomControls
        android:id="@+id/CAMERA_ZOOM_CONTROLS"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Solution

  • It's because params is nowhere defined in your code, hence the compiler is complaining. You can declare your variable in place where you're using it, so just add Camera.Parameters in front of your variable name:

    Camera.Parameters params = camera.getParameters();
    

    or - if you want to have it accessible in the whole MainActivity, place it below Camera declaration in MainActivity:

    Camera camera;
    
    //add params
    Camera.Parameters params;