Camera鏡頭縮放主要有兩種:監聽手勢滑動放下控制鏡頭縮放、seekBar拖動進度條控制鏡頭縮放
項目地址:https://github.com/LeeVanie/CameraDemo
1、雙指滑動實現鏡頭縮放:
(備註:項目中雙指滑動鏡頭縮放單獨成類做了封裝,不過原理和下面列出代碼一樣)
/**
* 向外放縮標誌
*/
private static final int ZOOM_OUT = 0;
/**
* 向內放縮標誌
*/
private static final int ZOOM_IN = 1;
//重寫onTouchEvent方法 獲取手勢
@Override
public boolean onTouchEvent(MotionEvent event) {
//識別手勢
gestureDetector.onTouchEvent(event);
final int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
break;
}
case MotionEvent.ACTION_UP: {
break;
}
case MotionEvent.ACTION_POINTER_DOWN: {
break;
}
case MotionEvent.ACTION_CANCEL: {
break;
}
}
return true;
}
//操作類
class ScaleGestureListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
int mScaleFactor;
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor = (int) detector.getScaleFactor();
Camera.Parameters params = camera.getParameters();
int zoom = params.getZoom();
if (mScaleFactor == ZOOM_IN) {
if (zoom < params.getMaxZoom())
zoom += 1;
} else if (mScaleFactor == ZOOM_OUT) {
if (zoom > 0)
zoom -= 1;
}
params.setZoom(zoom);
camera.setParameters(params);
return false;
}
}
2、seekBar進度條拖動控制鏡頭縮放
seekBar = ((SeekBar) findViewById(R.id.seekbar));
//初始化seekBar
int maxZoom = parameters.getMaxZoom();
seekBar.setProgress(0);
seekBar.setMax(maxZoom*100);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
Camera.Parameters parameters = camera.getParameters();
parameters.setZoom((int) (((progress * (1.0f / (maxZoom * 100))) * maxZoom)));
camera.setParameters(parameters);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});