Android 摄影机以编程方式缩放

Android 摄影机以编程方式缩放,android,android-camera,Android,Android Camera,如何在Android中实现收缩放大和缩小功能 我有下面的代码,但我得到一个错误 java.lang.NullPointerException:尝试调用虚拟方法 '安卓.硬件.摄像头$参数 空对象引用上的android.hardware.Camera.getParameters() 在com.roadlike.app.Camera.CameraImageMain.onTouchEvent 我的代码如下: @Override public boolean onTouchEvent(MotionEve

如何在Android中实现收缩放大和缩小功能

我有下面的代码,但我得到一个错误

java.lang.NullPointerException:尝试调用虚拟方法

'安卓.硬件.摄像头$参数 空对象引用上的android.hardware.Camera.getParameters() 在com.roadlike.app.Camera.CameraImageMain.onTouchEvent

我的代码如下:

@Override
public boolean onTouchEvent(MotionEvent event) {
    Camera.Parameters params = mCamera.getParameters();
    int action = event.getAction();

    if (event.getPointerCount() > 1) {
        // handle multi-touch events
        if (action == MotionEvent.ACTION_POINTER_DOWN) {
            mDist = getFingerSpacing(event);
        } else if (action == MotionEvent.ACTION_MOVE
                && params.isZoomSupported()) {
            mCamera.cancelAutoFocus();
            handleZoom(event, params);
        }
    } else {
        // handle single touch events
        if (action == MotionEvent.ACTION_UP) {
            handleFocus(event, params);
        }
    }
    return true;
}

private void handleZoom(MotionEvent event, Camera.Parameters params) {
    int maxZoom = params.getMaxZoom();
    int zoom = params.getZoom();
    float newDist = getFingerSpacing(event);
    if (newDist > mDist) {
        // zoom in
        if (zoom < maxZoom)
            zoom++;
    } else if (newDist < mDist) {
        // zoom out
        if (zoom > 0)
            zoom--;
    }
    mDist = newDist;
    params.setZoom(zoom);
    mCamera.setParameters(params);
}

public void handleFocus(MotionEvent event, Camera.Parameters params) {
    int pointerId = event.getPointerId(0);
    int pointerIndex = event.findPointerIndex(pointerId);
    // Get the pointer's current position
    float x = event.getX(pointerIndex);
    float y = event.getY(pointerIndex);

    List<String> supportedFocusModes = params.getSupportedFocusModes();
    if (supportedFocusModes != null
            && supportedFocusModes
            .contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
        mCamera.autoFocus(new Camera.AutoFocusCallback() {
            @Override
            public void onAutoFocus(boolean b, Camera camera) {
            }
        });
    }
@覆盖
公共布尔onTouchEvent(运动事件){
Camera.Parameters params=mCamera.getParameters();
int action=event.getAction();
if(event.getPointerCount()>1){
//处理多点触控事件
if(action==MotionEvent.action\u指针\u向下){
mDist=getFingerSpacing(事件);
}else if(action==MotionEvent.action\u MOVE
&¶ms.isZoomSupported()){
mCamera.cancelAutoFocus();
handleZoom(事件、参数);
}
}否则{
//处理单触事件
if(action==MotionEvent.action\u UP){
handleFocus(事件、参数);
}
}
返回true;
}
私有void handleZoom(MotionEvent事件,Camera.Parameters参数){
int maxZoom=params.getMaxZoom();
int zoom=params.getZoom();
float newDist=getFingerSpacing(事件);
如果(newDist>mDist){
//放大
如果(缩放<最大缩放)
zoom++;
}else if(newDist0)
缩放--;
}
mDist=newDist;
参数设置缩放(缩放);
mCamera.setParameters(参数);
}
public void handleFocus(MotionEvent事件,Camera.Parameters参数){
int pointerId=event.getPointerId(0);
int pointerIndex=event.findPointerIndex(pointerId);
//获取指针的当前位置
float x=event.getX(pointerIndex);
float y=event.getY(pointerIndex);
List supportedFocusModes=params.getSupportedFocusModes();
如果(supportedFocusModes!=空
&&支持聚焦模式
.contains(照相机.参数.聚焦模式自动)){
mCamera.autoFocus(新相机.AutoFocusCallback(){
@凌驾
自动对焦上的公共空白(布尔b,摄像头){
}
});
}

如何修复错误以实现收缩缩放效果?

我可以看到上面的错误,错误显示:
mCamera.getParameters()
with
mCamera
为空。您可以检查
mCamera
的可能重复项