怎么用Android Camera实现预览框显示
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有
千家信息网最后更新 2025年01月16日怎么用Android Camera实现预览框显示
这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有所收获,下面我们一起来看看吧。
Android要预览Camer界面其实非常简单,只需要几句话就行。
1、首先要再AndroidManifest.xml中添加权限
2、创建一个xml包含控件TextureView
比如activity_main.xml:
3、在Activity创建使用Camera
(1)使用Camera.open(0)获取Camera对象
(2)Camera进行参数设置,最后执行camera.startPreview
(3)关闭预览框的时候释放一下对象就行
比如下面的MainActivity.java代码:
package com.lwz.camera;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import android.Manifest;import android.content.Context;import android.content.pm.PackageManager;import android.graphics.SurfaceTexture;import android.hardware.Camera;import android.os.Bundle;import android.util.Log;import android.view.Display;import android.view.TextureView;import android.view.View;import android.view.WindowManager;import android.widget.Toast;public class MainActivity extends AppCompatActivity { private static final String TAG = "Camera2Test"; private TextureView mTextureView; //预览框对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(TAG, "onCreate!"); setContentView(R.layout.activity_main); intiView(); initEvent(); } private void intiView() { mTextureView = (TextureView) findViewById(R.id.textureView); } private void initEvent() { //预览按钮点击监听 findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "btnStart!"); startPreview(); } }); //停止预览按钮点击监听 findViewById(R.id.btnStop).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "btnStop!"); stopPreview(); } }); //预览框状态监听 mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) { Log.i(TAG, "onSurfaceTextureAvailable width = " + width + ",height = " + height); //当SurefaceTexture可用的时候,可以设置相机参数并打开相机 handleRequestCamera(surface); //handleRequestCamera(mTextureView.getSurfaceTexture()); //如果和mTextureView是同一个类内,效果和上面是一样的 } @Override public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surface, int width, int height) { Log.i(TAG, "onSurfaceTextureSizeChanged width = " + width + ",height = " + height); } @Override public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) { Log.i(TAG, "onSurfaceTextureDestroyed!"); return false; } @Override public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surface) { //正常预览的时候,会一直打印 //Log.i(TAG, "onSurfaceTextureUpdated!"); } }); } Camera mCameram; //可以用来对打开的摄像头进行关闭,释放 int mCameraId = 0; private void handleRequestCamera(SurfaceTexture texture) { Log.i(TAG, "handleRequestCamera"); //简单的判断权限 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{"android.permission.CAMERA"}, 100); Log.e(TAG, "openCamera no Permission!"); Toast.makeText(this, "无摄像头权限", Toast.LENGTH_LONG).show(); return; } try { //0/1/2 mCameram = Camera.open(mCameraId);//手机上可以用来切换前后摄像头,不同的设备要看底层支持情况 Log.i(TAG, "handleRequestCamera mCameraId = " + mCameraId); Camera.Parameters parameters = mCameram.getParameters(); parameters.setPreviewSize(720, 1280);// parameters.setPreviewSize(1280, 720);//不同的设备屏幕尺寸不同,有的设备设置错误的尺寸会崩溃 mCameram.setParameters(parameters); mCameram.setPreviewTexture(texture); mCameram.startPreview(); } catch (Exception error) { Log.e(TAG, "handleRequestCamera error = " + error.getMessage()); } } /** * 开始预览 */ private void startPreview() { Log.i(TAG, "startPreview"); SurfaceTexture mSurfaceTexture = mTextureView.getSurfaceTexture(); handleRequestCamera(mSurfaceTexture); } /** * 停止预览 * 根据情况选择是否释放, * 可以stopPreview,停止预览界面,后面用startPreview可以恢复预览界面 */ private void stopPreview() { if (mCameram != null) { mCameram.stopPreview(); mCameram.release(); mCameram = null; } } @Override protected void onDestroy() { super.onDestroy(); stopPreview();//界面退出要释放对象 }}
需要注意的是,调用Camera.open之前,要确保预览框已经准备好了,
即onSurfaceTextureAvailable方法已经回调,正常界面显示的时候,都是没有问题的,
但是如果在代码中,View或者Activity创建的时候调用Camera.open,这时候是无法预览界面的,
如果需要代码多处,调用Camera.open,正常做法可以设置一个全局变量,判断SurfaceTexture是否可用。
关于"怎么用Android Camera实现预览框显示"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"怎么用Android Camera实现预览框显示"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
界面
时候
对象
不同
代码
摄像头
权限
知识
设备
摄像
监听
内容
参数
尺寸
情况
按钮
相机
篇文章
价值
做法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全产品细分赛道
阿里云服务器安全性
人机自然交互与软件开发
等保测评软件开发不配合
mysql数据库的位置
数据库还原'设备激活报错
搜索网络安全宣传绘画
移动教学平台数据库完整性
融势互联网科技怎样
软件开发公司的组织文化
用服务器搭建自己的网站
801国家网络安全就业实训
如果查看网站的数据库类型
数据库查询语句如何执行
软件开发和测试哪个先从事
化工文献检索数据库
手机充话费服务器异常是怎么回事
搞软件开发的对应专业
手机怎么共用数据库
企业网络安全咨询报告
互联网软件开发简历
服务器如何自动装机
浙江众智工场互联网科技
幼儿园网络安全周活动总结
德阳软件开发规范
软件开发的流程图绘制软件
龙江网络安全培训中心
小店哪里有软件开发
数据库技术人员工作
龙华php软件开发