SurfaceView实现简单的相机
SurfaceView继承自View,主要用来展示视频流的绘制,典型的应用场景是相机,视频播放器,游戏界面绘制等。它独立于UI线程进行绘制,所以不会阻塞UI线程。本文将结合一个简单的相机demo介绍SurfaceView的使用。
我们实现的相机功能很简单,可以进行相机预览,点击拍照按钮拍照,并展示拍摄的照片,点击确定返回相机预览界面。
布局如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
>
<SurfaceView
android:id="@+id/preview_surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"/>
<Button
android:id="@+id/take_photo_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="拍照"/>
<Button
android:id="@+id/confirm_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="确定"/>
</RelativeLayout>
SurfaceView的初始化如下,首先根据SurfaceView获取SurfaceHolder,SurfaceHolder是一个接口,提供了控制SurfaceView界面的函数,比如控制界面的尺寸、格式,编辑界面像素,监控界面的变化等