您的位置:首页 > 其它

SurfaceView取景

2016-04-19 11:49 429 查看
xml中的布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.surfaceview.MainActivity" >
<SurfaceView
android:id="@+id/sfv"
android:layout_width="300dip"
android:layout_height="300dip"
/>
</RelativeLayout>


//主类中的实现代码

import java.io.IOException;
import android.support.v7.app.ActionBarActivity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.WindowManager;
@SuppressWarnings("deprecation")
public class MainActivity extends ActionBarActivity {
//定义控件
private SurfaceView sfv;
private Camera camera;//摄像头
private boolean preview  = false ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在加载布局之前调用
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
//获得控件的id
sfv=(SurfaceView) findViewById(R.id.sfv);
//获得控制器
SurfaceHolder holder = sfv.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//设置分辨率
holder.setFixedSize(400, 400);
holder.setKeepScreenOn(true);
//实现回调的接口
holder.addCallback(new Callback() {

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//销毁的时候相机不等于空
if(camera != null) {
/* 若摄像头正在工作,先停止它 */
if(preview) {
camera.stopPreview();  //停止展示view视图
preview = false;
}
//如果注册了此回调,在release之前调用,否则release之后还回调,crash
camera.setPreviewCallback(null);
camera.release();
camera=null;
}
}
@SuppressWarnings("deprecation")
@Override
public void surfaceCreated(SurfaceHolder holder) {

camera=Camera.open();
camera.setDisplayOrientation(90);
try {
//设置预览显示
camera.setPreviewDisplay(holder);
Camera.Parameters parameters=camera.getParameters();
/* 设置预览照片的大小 */
parameters.setPictureSize(100, 100);
/* 每秒从摄像头捕获5帧画面, */
//预览的频率
parameters.setPreviewFrameRate(5);
/* 设置照片的输出格式:jpg */
parameters.setPictureFormat(PixelFormat.JPEG);
/* 照片质量 */
parameters.set("jpeg-quality", 400);
//设置照片的额质量
parameters.setJpegQuality(80);
/*设置图片的大小*/
parameters.setPictureSize(1024, 768);
//开启预览
camera.setParameters(parameters);
camera.startPreview();
preview=true;
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: