Android 摄影机以编程方式缩放
如何在Android中实现收缩放大和缩小功能 我有下面的代码,但我得到一个错误 java.lang.NullPointerException:尝试调用虚拟方法 '安卓.硬件.摄像头$参数 空对象引用上的android.hardware.Camera.getParameters() 在com.roadlike.app.Camera.CameraImageMain.onTouchEvent 我的代码如下: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
@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()
withmCamera
为空。您可以检查mCamera
的可能重复项