Android相机第四篇:TextureView使⽤
我在第三篇⽂章介绍Camera对象时就说到,⽬前拍照涉及到的预览界⾯主要有两种:TextureView和SurfaceView,本章的重点时对TextureView进⾏分析,结合Camera对象开始⾃定义相机。 ⾸先展⽰下效果:微波感应模块
纱窗角码
166.gif
SurfaceTextureListener说明
SurfaceTextureListener是TextureView⾮常重要的监听回调,也可以说SurfaceTextureListener是`TextureView的⽣命周期的体现
非标夹具parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
//获取最适合的分辨率
溶洞处理Camera.Size previewSize = SupportedPreviewSizes(), width, height); parameters.setPreviewSize(previewSize.width, previewSize.height);
//获取最适合的分辨率
Camera.Size pictureSize = SupportedPictureSizes(), width, height); parameters.setPictureSize(pictureSize.width, pictureSize.height);
//设置拍照之后,本地图⽚格式
parameters.setPictureFormat(ImageFormat.JPEG);
//拍照后的图⽚⽂件旋转90度
parameters.setRotation(90);
mCamera.setParameters(parameters);
//将相机的预览效果显⽰出来
mCamera.setPreviewTexture(surface);
//开启预览
mCamera.startPreview();
} catch (IOException e) {
dota重金属
e.printStackTrace();
}
}
/**
* 获取最合适的Size
* @param sizeList
* @param width
* @param height
* @return
*/
private Camera.Size getCameraSize(List<Camera.Size> sizeList, int width, int height){
Camera.Size tempSize = null;
float aspectRatio = height * 1.0f / width;//求出预期横宽⽐
float offset = aspectRatio;//预期横宽⽐和实际横宽⽐误差
for(Camera.Size size : sizeList){
if(size.width < height || size.height < width){
continue;
}
//误差最⼩值
if(Math.abs(aspectRatio - size.width * 1.0f / size.height) < offset){
offset = Math.abs(aspectRatio - size.width * 1.0f / size.height);
tempSize = size;
}
}
if(tempSize == null){
tempSize = (0);
鬼屋道具
}
return tempSize;
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
//监听布局变化时执⾏
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
if(mCamera != null){
mCamera.stopPreview();
mCamera = null;
}
return true;
}
@Override