怎么用Android Camera实现预览框显示
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有
千家信息网最后更新 2026年10月31日怎么用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安全错误
数据库的锁怎样保障安全
互联网与科技
伟宏互联网科技
国智互联网科技
深圳恒合互联网络科技有限公司
科技平台互联网
科技股互联网
腾讯阿里互联网科技
哈尔滨新华互联网科技
互联网科技寓意
互联网科技项目计划书材料类
苏州五指互联网络科技有限
辽宁互联网新科技
元气玛特互联网科技公司是外包吗
互联网企业科技类企业如何做账
富国互联网科技002692
有人说阿里系是互联网科技企业
西安有哪些互联网高科技企业
互联网公司属于科技吗
北京天晋互联网科技有限公司
优雇互联网科技有限公司
智慧科技互联网
互联网前沿科技
中盈科技互联网信息有限公司
互联网科技实习生岗位职责
辽宁互联网新科技
恒生互联网科技指数跳水
华中科技大学互联网的牛人
互联网科技快讯热点
下一代互联网重大应用科技园
工业互联网科技创业