gpt4 book ai didi

Android:硬件。相机对焦方法不适用于某些设备

转载 作者:行者123 更新时间:2023-11-30 00:19:21 28 4
gpt4 key购买 nike

我正在使用这些方法来激活 SurFaceView 上的触摸焦点

private SurfaceView surfaceiew;
private CameraSource camSource;
private Camera camera;
private Camera.Parameters params;



private void initCameraFocusListener() {
surfaceView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {

cameraFocus(event, camSource, Camera.Parameters.FOCUS_MODE_AUTO);

return false;
}
});

}




// camera focus method
private boolean cameraFocus(MotionEvent event, @NonNull CameraSource cameraSource, @NonNull String focusMode) {
Field[] declaredFields = CameraSource.class.getDeclaredFields();


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);

float touchMajor = event.getTouchMajor();
float touchMinor = event.getTouchMinor();

Rect touchRect = new Rect((int)(x - touchMajor / 2), (int)(y - touchMinor / 2), (int)(x + touchMajor / 2), (int)(y + touchMinor / 2));

Rect focusArea = new Rect();

focusArea.set(touchRect.left * 2000 / surfaceView.getWidth() - 1000,
touchRect.top * 2000 / surfaceView.getHeight() - 1000,
touchRect.right * 2000 / surfaceView.getWidth() - 1000,
touchRect.bottom * 2000 / surfaceView.getHeight() - 1000);

// Submit focus area to camera

ArrayList<Camera.Area> focusAreas = new ArrayList<Camera.Area>();
focusAreas.add(new Camera.Area(focusArea, 1000));

for (Field field : declaredFields) {
if (field.getType() == Camera.class) {
field.setAccessible(true);
try {
camera = (Camera) field.get(cameraSource);
if (camera != null) {
params = camera.getParameters();
params.setFocusMode(focusMode);
params.setFocusAreas(focusAreas);
camera.setParameters(params);

// Start the autofocus operation

camera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean b, Camera camera) {
// currently set to auto-focus on single touch
}
});
return true;
}

return false;
} catch (IllegalAccessException e) {
e.printStackTrace();
}

break;
}
}



return false;
}

它在大多数设备上运行良好,但我发现它不适用于使用 Android 5.0 版本的华为荣耀 5x。

奇怪的部分是方法而不是做它的工作,它把我带到上一页( Activity )。

如何正确使用 CameraSource 和 SurfaceView 进行触摸自动对焦?

最佳答案

我想问题是因为我使用的是已弃用的类:Camera

关于Android:硬件。相机对焦方法不适用于某些设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46596412/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com