作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用这些方法来激活 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/
我是一名优秀的程序员,十分优秀!