返回顶部
首页 > 资讯 > 精选 >怎么用Android Camera实现预览框显示
  • 888
分享到

怎么用Android Camera实现预览框显示

2023-06-30 14:06:15 888人浏览 独家记忆
摘要

这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有所收获,下面我们一起

这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有所收获,下面我们一起来看看吧。

Android要预览Camer界面其实非常简单,只需要几句话就行。

首先要再AndroidManifest.xml中添加权限

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

创建一个xml包含控件TextureView

比如activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="Http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextureView        android:id="@+id/textureView"        android:layout_width="match_parent"        android:layout_height="match_parent" />    <Button        android:id="@+id/btnStop"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="0.8dp"        android:text="stop preview"        android:layout_alignParentBottom="true"        android:layout_alignParentEnd="true"/>    <Button        android:id="@+id/btnStart"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_margin="0.8dp"        android:text="start preview"        android:layout_alignParentBottom="true"        android:layout_toStartOf="@id/btnStop"/></RelativeLayout>

在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);    }        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实现预览框显示”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么用Android Camera实现预览框显示

本文链接: https://lsjlt.com/news/329729.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用Android Camera实现预览框显示
    这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有所收获,下面我们一起...
    99+
    2023-06-30
  • 怎么用Android Camera实现最简单的预览框显示
    本篇内容介绍了“怎么用Android Camera实现最简单的预览框显示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Androi...
    99+
    2023-06-30
  • Android Camera1实现预览框显示
    本文实例为大家分享了Android Camera1实现预览框显示的具体代码,供大家参考,具体内容如下 Android要预览Camer界面其实非常简单,只需要几句话就行。 1、首先要再...
    99+
    2024-04-02
  • AndroidCamera2实现最简单的预览框显示
    本文实例为大家分享了Android Camera2实现预览框显示的具体代码,供大家参考,具体内容如下 Android要预览Camer2界面比Camera1稍微复杂一点,但是也是不难的...
    99+
    2024-04-02
  • Android camera实时预览 实时处理,人脸识别示例
    Android camera实时预览 实时处理,面部认证。 预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,...
    99+
    2022-06-06
    示例 人脸识别 Android
  • iframe预览word显示空白怎么解决
    当iframe预览Word显示空白时,可能是由于以下几个原因导致的:1. Word文档格式不受支持:某些较新的Word文档格式可能不...
    99+
    2023-08-11
    iframe word
  • win7系统窗口预览怎么显示加速
    本篇内容主要讲解“win7系统窗口预览怎么显示加速”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win7系统窗口预览怎么显示加速”吧!按win+r打开运行窗口,输入refedit,点击确定。依次...
    99+
    2023-06-28
  • Android怎么使用Toast显示消息提示框
    可以使用以下代码在Android中使用Toast显示消息提示框:```Toast.makeText(context, "消息内容",...
    99+
    2023-08-15
    Android Toast
  • android怎么实现点击按钮显示文本框信息
    要实现点击按钮显示文本框信息,你可以按照以下步骤进行操作:1. 在你的布局文件(XML文件)中,添加一个按钮和一个文本框(EditT...
    99+
    2023-09-27
    Android
  • Android如何实现编辑框显示行数
    在Android中,可以通过设置EditText的属性来实现编辑框显示行数。1. 在布局文件中,将EditText的属性`andro...
    99+
    2023-09-27
    Android
  • Android怎么实现图片预览与保存功能
    这篇“Android怎么实现图片预览与保存功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android怎么实现图片预览与...
    99+
    2023-06-30
  • Vue怎么使用pdfobject实现预览pdf
    本篇内容主要讲解“Vue怎么使用pdfobject实现预览pdf”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue怎么使用pdfobject实现预览pdf”吧!安装 pnpm add...
    99+
    2023-07-05
  • android弹出提示框怎么实现
    要在Android中实现弹出提示框,你可以通过以下几种方式实现:1. 使用AlertDialog:AlertDialog是Andro...
    99+
    2023-10-08
    android
  • HTML5怎么实现拖拽预览
    本篇内容主要讲解“HTML5怎么实现拖拽预览”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5怎么实现拖拽预览”吧!源码<!DOCTYPE ...
    99+
    2024-04-02
  • Android中怎么利用ViewPager实现图片滑动预览效果
    本篇文章给大家分享的是有关Android中怎么利用ViewPager实现图片滑动预览效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。xml代码:<xml ve...
    99+
    2023-05-30
    android viewpager
  • android中怎么通过自定义Camera实现拍照
    android中怎么通过自定义Camera实现拍照,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、打开相机a.预览拍摄图片,需用到SurfaceView,并且...
    99+
    2023-05-31
    android camera
  • Android怎么自定义Camera实现拍照小功能
    这篇文章主要介绍“Android怎么自定义Camera实现拍照小功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么自定义Camera实现拍照小功能”文章能帮助大家解决问题。首先实现...
    99+
    2023-06-30
  • Android应用中怎么实现一个图片预览缩放功能
    Android应用中怎么实现一个图片预览缩放功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。具体实现方法如下<&#63;xml version="1....
    99+
    2023-05-31
    android roi
  • Win10 10102预览版怎么显示隐藏文件、文件夹?
    Windows10的10102版本的系统,我们如何才能找到文件夹选项,设置显示系统中的隐藏文件、文件夹和驱动器? 在控制面板中我们找不到文件夹选项; Windows10的10102版系统找到文件夹选项,设置显示系统中隐...
    99+
    2023-06-15
    win10预览版10102下载 win10预览版10102 Win10 10102 预览 文件夹 文件
  • android状态栏显示短信怎么实现
    要在Android的状态栏中显示短信,你需要创建一个BroadcastReceiver来接收短信,并在接收到短信时将其显示在状态栏上...
    99+
    2023-08-12
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作