2025年3月27日 星期四 甲辰(龙)年 月廿六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

Camera预览旋转设置

时间:02-06来源:作者:点击数:25

实现效果如下:

在这里插入图片描述

点击4个按钮分别实现4个角度的旋转。

  1. 目标版本设置为21,这样不需要动态申请权限。
  2. 在清单文件申请CAMERA权限
  3. 布局
    • <?xml version="1.0" encoding="utf-8"?>
    • <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=".MainActivity">
    • <FrameLayout
    • android:id="@+id/fl_container"
    • android:layout_width="match_parent"
    • android:layout_height="match_parent" />
    • <LinearLayout
    • android:layout_width="match_parent"
    • android:orientation="horizontal"
    • android:layout_height="wrap_content"
    • android:layout_alignParentBottom="true">
    • <View
    • android:layout_width="6dp"
    • android:layout_height="0dp"/>
    • <Button
    • android:layout_width="0dp"
    • android:layout_height="wrap_content"
    • android:layout_weight="1"
    • android:id="@+id/btn_0"
    • android:onClick="onClick"
    • android:text="0"/>
    • <View
    • android:layout_width="6dp"
    • android:layout_height="0dp"/>
    • <Button
    • android:layout_width="0dp"
    • android:layout_height="wrap_content"
    • android:layout_weight="1"
    • android:id="@+id/btn_90"
    • android:onClick="onClick"
    • android:text="90"/>
    • <View
    • android:layout_width="6dp"
    • android:layout_height="0dp"/>
    • <Button
    • android:layout_width="0dp"
    • android:layout_height="wrap_content"
    • android:layout_weight="1"
    • android:onClick="onClick"
    • android:id="@+id/btn_180"
    • android:text="180"/>
    • <View
    • android:layout_width="6dp"
    • android:layout_height="0dp"/>
    • <Button
    • android:layout_width="0dp"
    • android:layout_height="wrap_content"
    • android:layout_weight="1"
    • android:onClick="onClick"
    • android:id="@+id/btn_270"
    • android:text="270"/>
    • <View
    • android:layout_width="6dp"
    • android:layout_height="0dp"/>
    • </LinearLayout>
    • </RelativeLayout>
  4. 代码

    • class MainActivity : AppCompatActivity() {
    • private var cameraView: FrameLayout? = null
    • private var camera: Camera? = null
    • private lateinit var cameraContainer: ViewGroup
    • override fun onCreate(savedInstanceState: Bundle?) {
    • super.onCreate(savedInstanceState)
    • setContentView(R.layout.activity_main)
    • cameraContainer = findViewById(R.id.fl_container)
    • }
    • override fun onResume() {
    • super.onResume()
    • startPreview()
    • }
    • override fun onPause() {
    • super.onPause()
    • stopPreview()
    • }
    • private fun startPreview() {
    • val surfaceView = SurfaceView(this)
    • surfaceView.holder.addCallback(object : SurfaceHolder.Callback {
    • override fun surfaceCreated(holder: SurfaceHolder) {
    • camera = Camera.open()
    • camera?.setPreviewDisplay(holder)
    • camera?.setDisplayOrientation(0)
    • camera?.startPreview()
    • }
    • override fun surfaceDestroyed(holder: SurfaceHolder) {
    • }
    • override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {}
    • })
    • cameraView = FrameLayout(this).apply { addView(surfaceView) }
    • cameraContainer.addView(cameraView)
    • }
    • private fun stopPreview() {
    • camera?.stopPreview()
    • camera?.release()
    • camera = null
    • cameraView?.removeAllViews()
    • (cameraView?.parent as? ViewGroup)?.removeAllViews()
    • cameraView = null
    • }
    • fun onClick(view: View) {
    • when (view.id) {
    • R.id.btn_0 -> camera?.setDisplayOrientation(0)
    • R.id.btn_90 -> camera?.setDisplayOrientation(90)
    • R.id.btn_180 -> camera?.setDisplayOrientation(180)
    • R.id.btn_270 -> camera?.setDisplayOrientation(270)
    • }
    • }
    • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门