Camera api1预览的实现

    最近在学习Camera的一些基础知识,因为是刚入门所以从api1开始慢慢熟悉,api1已经被弃用了所以也不会进行深入的学习,只是打算利用api1简单的实现预览、拍照、还有录像功能,然后在开始api2的学习。

    其实网上关于Camera api1的实现代码是有很多的,但大多数都很复杂,对于我这样的初级入门者来说简直就是种折磨,单单一个预览功能就几百行代码,真有一种劝退的感觉,后来自己摸索发现这部分代码其实设置了很多的参数,例如自定义了SurfaceView、判断用前置摄像头还有后置摄像,还有预览时怎么解决画面旋转造成的画面扭曲等等.......

    这里放下大佬的文章:https://www.jianshu.com/p/f8d0d1467584 其实还有很多只是找不着了,剩下的自己找吧。

    不说这么多了下面回到正题:

    在使用camera设备前,需要先获取到手机权限,在AndroidManifest.xml中添加

<uses-permission android:name="android.permission.CAMERA"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

后两个不加也行,那是后面拍照保存的需要用到的。

配置完成后,到layout中配置xml文件一般来说是activity_main.xml,在里面添加SurfaceView

回到主类MainActivity中我是一次性把所有代码写在oncreate方法中了,觉得太乱可以自己写个方法然后在oncreate中调用


这里说明一下要使用camera.open();一定要做权限判断否则编译运行的时候app会闪退

if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED) 


下面是全部代码

package com.example.testdemo2;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.content.ContextCompat;

import android.Manifest;

import android.content.pm.PackageManager;

import android.graphics.SurfaceTexture;

import android.os.Bundle;

import android.hardware.Camera;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import java.io.IOException;

public class MainActivityextends AppCompatActivity  {

private Cameracamera;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        SurfaceView v=(SurfaceView)findViewById(R.id.surfaceView);

        SurfaceHolder h=v.getHolder();

        if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED) {

h.addCallback(new SurfaceHolder.Callback() {

@Override

                public void surfaceCreated(SurfaceHolder h) {

camera=camera.open();

                    camera.setDisplayOrientation(90);

                        try {

camera.setPreviewDisplay(h);

                            camera.startPreview();

                        }catch (IOException e) {

e.printStackTrace();

                        }

}

@Override

                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

                }

@Override

                public void surfaceDestroyed(SurfaceHolder holder) {

camera.release();

                }

});


        }

}

}

这里再提一嘴,一开始我运行的时候是黑屏的,后来我发现是权限没开,你在手机给app开下权限就能显示了。    

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容