返回顶部
首页 > 资讯 > 移动开发 >Android Camera1实现预览框显示
  • 151
分享到

Android Camera1实现预览框显示

2024-04-02 19:04:59 151人浏览 独家记忆
摘要

本文实例为大家分享了Android Camera1实现预览框显示的具体代码,供大家参考,具体内容如下 Android要预览Camer界面其实非常简单,只需要几句话就行。 1、首先要再

本文实例为大家分享了Android Camera1实现预览框显示的具体代码,供大家参考,具体内容如下

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

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

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

2、创建一个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>

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);
    }

    
    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是否可用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android Camera1实现预览框显示

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

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

猜你喜欢
  • Android Camera1实现预览框显示
    本文实例为大家分享了Android Camera1实现预览框显示的具体代码,供大家参考,具体内容如下 Android要预览Camer界面其实非常简单,只需要几句话就行。 1、首先要再...
    99+
    2024-04-02
  • 怎么用Android Camera实现预览框显示
    这篇文章主要介绍了怎么用Android Camera实现预览框显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Android Camera实现预览框显示文章都会有所收获,下面我们一起...
    99+
    2023-06-30
  • 怎么用Android Camera实现最简单的预览框显示
    本篇内容介绍了“怎么用Android Camera实现最简单的预览框显示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Androi...
    99+
    2023-06-30
  • AndroidCamera2实现最简单的预览框显示
    本文实例为大家分享了Android Camera2实现预览框显示的具体代码,供大家参考,具体内容如下 Android要预览Camer2界面比Camera1稍微复杂一点,但是也是不难的...
    99+
    2024-04-02
  • Android如何实现编辑框显示行数
    在Android中,可以通过设置EditText的属性来实现编辑框显示行数。1. 在布局文件中,将EditText的属性`andro...
    99+
    2023-09-27
    Android
  • Android实现Camera2预览和拍照效果
    简介网上对于 Camera2 的介绍有很多,在 Github 上也有很多关于 Camera2 的封装库,但是对于那些库,封装性太强,有时候我们仅仅是需要个简简单单的拍照功能而已,因此,自定义一个 Camera 使之变得轻量级那是非常重要的了...
    99+
    2023-05-30
    android camera2 预览
  • 十分钟实现 Android Camera2 相机预览
    1. 前言 因为工作中要使用Android Camera2 API,但因为Camera2比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在CSDN上记录了下,希望能帮助到更...
    99+
    2023-10-26
    android 相机 Camera2 音视频 预览
  • Android开发如何实现浏览器全屏显示功能
    这篇文章给大家分享的是有关Android开发如何实现浏览器全屏显示功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:业务需求:浏览器设置中支持全屏显示的功能。分析:只需要在设置界面上增加是否全屏的che...
    99+
    2023-05-30
    android 浏览器
  • iframe预览word显示空白怎么解决
    当iframe预览Word显示空白时,可能是由于以下几个原因导致的:1. Word文档格式不受支持:某些较新的Word文档格式可能不...
    99+
    2023-08-11
    iframe word
  • Android实现图片预览与保存功能
    目录前言引入插件总结前言 在App开发中,通常为了省流提高加载速度提升用户体验我们通常在列表中或新闻中的插图都是以缩略图压缩过的图片来进行展示,当用户点击图片时我们再去加载真正像素的...
    99+
    2024-04-02
  • Java实现在线预览的示例代码(openOffice实现)
    简介之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。 我的实现逻辑有两种: 一、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.p...
    99+
    2023-05-30
    java openoffice ava
  • Android camera实时预览 实时处理,人脸识别示例
    Android camera实时预览 实时处理,面部认证。 预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,...
    99+
    2022-06-06
    示例 人脸识别 Android
  • win7系统窗口预览怎么显示加速
    本篇内容主要讲解“win7系统窗口预览怎么显示加速”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win7系统窗口预览怎么显示加速”吧!按win+r打开运行窗口,输入refedit,点击确定。依次...
    99+
    2023-06-28
  • win7系统中如何设置显示预览图
    这篇文章将为大家详细讲解有关win7系统中如何设置显示预览图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。右键计算机点击选择“属性”,打开属性窗口。 在打开的系统界面中,点击打开“高级系统设置”...
    99+
    2023-06-28
  • android怎么实现点击按钮显示文本框信息
    要实现点击按钮显示文本框信息,你可以按照以下步骤进行操作:1. 在你的布局文件(XML文件)中,添加一个按钮和一个文本框(EditT...
    99+
    2023-09-27
    Android
  • 解决MacOS中访达缩略图、预览图、视频预览无法正常显示
    问题来源 在Mac访达中通常会遇到系统卡顿导致mp4视频格式文件、照片无法预览这种情况。 解决方法 打开启动台,找到实用工具中的活动监视器 或者直接通过command+space(空格键)打开聚焦中心输入活动监视器 在活动监视器中,在右...
    99+
    2023-08-30
    macos github 经验分享
  • Android使用Toast显示消息提示框
    在Android中,可以使用Toast来显示消息提示框。Toast是一种简洁的弹出式提示框,可以显示一段短暂的消息。下面是使用Toa...
    99+
    2023-08-15
    Android
  • Android实现图片浏览器示例
    本文所述为一个基础的Android图片浏览器代码,是仿写Google原版实现的,代码中实现了主要的实现过程和方法,具体的完善还需要自己添加,代码中有很多注释,可帮助新手们快速理...
    99+
    2022-06-06
    浏览器 示例 图片 Android
  • Vscode实现PHP在浏览器实时预览
    大家在写html的时候能用到实时预览,但是在PHP就没法用了,虽然之前推荐过“Open PHP/HTML/JS In Browser”这个插件,可是没有实时预览这个功能,是非常难受的,然后我就翻阅互联网找到了一种解决方法。 那就是使用“Li...
    99+
    2023-10-11
    vscode php asp.net node.js
  • Android实现图片点击预览效果(zoom动画)
    参考:https://developer.android.google.cn/training/animation/zoom.html 1.创建Views 下面的布局包括了你想...
    99+
    2022-06-06
    图片 zoom Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作