Android 安卓相机变焦

Android 安卓相机变焦,android,Android,我正在制作一个使用相机硬件的应用程序。我试图在摄影机中实现收缩缩放,但缩小不起作用,只是放大。这是我的密码: 公共布尔onTouchEvent(运动事件){ Camera.Parameters params=mCamera.getParameters(); int action=event.getAction(); if(event.getPointerCount()>1){ if(action==MotionEvent.action\u指针\u向下){ float mDist=getFinge

我正在制作一个使用相机硬件的应用程序。我试图在摄影机中实现收缩缩放,但缩小不起作用,只是放大。这是我的密码: 公共布尔onTouchEvent(运动事件){

Camera.Parameters params=mCamera.getParameters();
int action=event.getAction();
if(event.getPointerCount()>1){
if(action==MotionEvent.action\u指针\u向下){
float 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();
@抑制警告(“未使用”)
int currnetZoom=params.getZoom();
float newDist=getFingerSpacing(事件);
浮动mDist=0;
如果(newDist>mDist){
如果(缩放<最大缩放)
zoom++;
}else if(newDist=0)
缩放--;
}
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();
if(supportedFocusModes!=null&&supportedFocusModes.contains(Camera.Parameters.FOCUS\u MODE\u AUTO)){
mCamera.autoFocus(新相机.AutoFocusCallback(){
@凌驾
自动对焦上的公共空白(布尔b,摄像头){
}
});
}
}
/**确定前两个手指之间的间距*/
@抑制警告(“弃用”)
专用浮点getFingerSpacing(MotionEvent事件){
float x=event.getX(0)-event.getX(1);
float y=event.getY(0)-event.getY(1);
返回FloatMath.sqrt(x*x+y*y);
}
求你了,我真的需要帮助。谢谢

浮动mDist=0;如果(newDist>mDist){可能是个问题。您可能希望将
mDist
作为实例成员而不是本地变量。因此,您可以在此处使用内置检查,即
float mDist=0;如果(newDist>mDist){
可能是个问题。您可能希望将
mDist
设置为实例成员,而不是本地变量。因此,您可以在此处使用内置检查
    Camera.Parameters params = mCamera.getParameters();
    int action = event.getAction();


    if (event.getPointerCount() > 1) {

        if (action == MotionEvent.ACTION_POINTER_DOWN) {
            float mDist = getFingerSpacing(event);
        } else if (action == MotionEvent.ACTION_MOVE && params.isZoomSupported()) {
            mCamera.cancelAutoFocus();
            handleZoom(event, params);
        }
    } else {

        if (action == MotionEvent.ACTION_UP) {
            handleFocus(event, params);
        }
    }
    return true;
}

@SuppressWarnings("deprecation")
private void handleZoom(MotionEvent event, Camera.Parameters params) {
    int maxZoom = params.getMaxZoom();
    int zoom = params.getZoom();
    @SuppressWarnings("unused")
    int currnetZoom = params.getZoom();
    float newDist = getFingerSpacing(event);
    float mDist = 0;
    if (newDist > mDist) {
        if (zoom < maxZoom)
            zoom++;
    } else if (newDist <= mDist) {

        if (zoom >= 0)
            zoom--;
    }
    mDist = newDist;
    params.setZoom(zoom);
    mCamera.setParameters(params);
}

@SuppressWarnings("deprecation")
public void handleFocus(MotionEvent event, Camera.Parameters params) {
    int pointerId = event.getPointerId(0);
    int pointerIndex = event.findPointerIndex(pointerId);

    @SuppressWarnings("unused")
    float x = event.getX(pointerIndex);
    @SuppressWarnings("unused")
    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) {

            }
        });
    }
}

/** Determine the space between the first two fingers */
@SuppressWarnings("deprecation")
private float getFingerSpacing(MotionEvent event) {

    float x = event.getX(0) - event.getX(1);
    float y = event.getY(0) - event.getY(1);
    return FloatMath.sqrt(x * x + y * y);
}


    please I really need help. Thanks