首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android - 在相机上显示网格线

以下是关于“Android - 在相机上显示网格线”的完善且全面的答案:

网格线

网格线是一种图形元素,通常用于在相机上显示视图的边界。在Android开发中,可以使用以下方法在相机上显示网格线:

  1. 使用CameraX库:CameraX是一个用于处理相机的库,可以轻松地在相机上显示网格线。首先,需要在build.gradle文件中添加CameraX依赖项:
代码语言:groovy
复制
dependencies {
    implementation 'androidx.camera:camera-core:1.0.0-alpha08'
    implementation 'androidx.camera:camera-camera2:1.0.0-alpha08'
}

然后,在布局文件中添加一个PreviewView,用于显示相机预览:

代码语言:xml<androidx.camera.view.PreviewView
复制
    android:id="@+id/preview_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

接下来,在ActivityFragment中初始化CameraX并设置预览:

代码语言:java
复制
private PreviewView previewView;
private LifecycleOwner lifecycleOwner;
private CameraX cameraX;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    previewView = findViewById(R.id.preview_view);
    lifecycleOwner = this;

    cameraX = new CameraX.Builder()
            .setPreviewView(previewView)
            .build();
    cameraX.bindToLifecycle(lifecycleOwner);
}

最后,在CameraXPreviewView中添加网格线。可以使用ShapeDrawable创建一个网格线图形,并将其添加到PreviewViewoverlay中:

代码语言:java
复制
private void addGridLines() {
    ShapeDrawable gridLines = new ShapeDrawable();
    Paint paint = gridLines.getPaint();
    paint.setColor(Color.WHITE);
    paint.setStrokeWidth(2);
    paint.setStyle(Paint.Style.STROKE);
    paint.setPathEffect(new DashPathEffect(new float[]{10, 10}, 0));

    Path path = new Path();
    path.moveTo(0, 0);
    path.lineTo(previewView.getWidth(), 0);
    path.lineTo(previewView.getWidth(), previewView.getHeight());
    path.lineTo(0, previewView.getHeight());
    path.close();

    gridLines.setShape(new PathShape(path, previewView.getWidth(), previewView.getHeight()));
    previewView.getOverlay().add(gridLines);
}
  1. 使用SurfaceViewCamera类:如果不想使用CameraX库,可以使用SurfaceViewCamera类创建自定义相机预览,并在其中添加网格线。以下是一个简单的示例:
代码语言:java
复制
private SurfaceView surfaceView;
private Camera camera;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    surfaceView = findViewById(R.id.surface_view);
    surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            camera = Camera.open();
            try {
                camera.setPreviewDisplay(holder);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            Camera.Parameters parameters = camera.getParameters();
            parameters.setPreviewSize(width, height);
            camera.setParameters(parameters);
            camera.startPreview();
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            camera.stopPreview();
            camera.release();
        }
    });
}

private void addGridLines() {
    ShapeDrawable gridLines = new ShapeDrawable();
    Paint paint = gridLines.getPaint();
    paint.setColor(Color.WHITE);
    paint.setStrokeWidth(2);
    paint.setStyle(Paint.Style.STROKE);
    paint.setPathEffect(new DashPathEffect(new float[]{10, 10}, 0));

    Path path = new Path();
    path.moveTo(0, 0);
    path.lineTo(surfaceView.getWidth(), 0);
    path.lineTo(surfaceView.getWidth(), surfaceView.getHeight());
    path.lineTo(0, surfaceView.getHeight());
    path.close();

    gridLines.setShape(new PathShape(path, surfaceView.getWidth(), surfaceView.getHeight()));
    surfaceView.getOverlay().add(gridLines);
}

这些方法可以在Android开发中在相机上显示网格线。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android机上使用PaddleMobile实现图像分类

Android项目中有使用过CPP的读者都知道,想要让Java代码能够调用CPP代码,那么CPP的函数明明就要按照一定的规范:Java_包名_类名_对应的Java的方法名,目前官方提供了5个可以给Java...root@test:/home/test/paddle-mobile/build# ls libpaddle-mobile.so libpaddle-mobile.so就是我们开发Android项目的时候使用到的...cd paddle-mobile/tools/ sh build.sh android (可选)如果想编译针对某一个网络编译更小的库时,可以命令后面加上相应的参数,如下: sh build.sh android...3、Android项目的配置文件夹中加上权限声明,因为我们要使用到读取相册和使用相机,所以加上以下的权限声明: <uses-permission android:name="android.permission.CAMERA..." android:hint="预测结果会在这里显示" android:layout_height="100dp" /> <ImageView

66020

基于Paddle LiteAndroid机上实现图像分类

下载解压之后得到的目录结构如下,其中我们所需的java的jar和so动态库,注意32位的so动态库放在Android的armeabi-v7a目录,64位的so动态库放在Android的arm64-v8a...Paddle Lite源码的根目录下执行以下两条命令编译Paddle Lite的Android预测库。....开发Android项目创建一个Android项目,app/libs目录下存放上一步编译得到的PaddlePredictor.jar,并添加到app库中,添加方式可以是选择这个jar包,右键选择add...,因为训练的时候图像预处理可能不一样的,有些读者出现在电脑上准确率很高,但在手机上准确率很低,多数情况下就是这个图像预处理做得不对。...拿到图片路径之后,调用PaddleLiteClassification类中的predictImage()方法预测并获取预测值,页面上显示预测的标签、对应标签的名称、概率值和预测时间。

87810

使用TensorFlow LiteAndroid机上实现图像分类

github.com/tensorflow/tensorflow/tree/master/tensorflow/lite Tensorflow的版本为:Tensorflow 1.14.0 转换模型 手机上执行预测...1、创建完成之后,app目录下的build.gradle配置文件加上以下配置信息: dependencies下加上包的引用,第一个是图片加载框架Glide,第二个就是我们这个项目的核心TensorFlow...方法是加载模型,并得到一个对象tflite,之后就是使用这个对象来预测图像,同时可以使用这个对象设置一些参数,比如设置使用的线程数量tflite.setNumThreads(4); showDialog()方法是显示弹窗...predict_image()方法是预测图片并显示结果的,预测的流程是:获取图片的路径,然后使用对图片进行压缩,之后把图片转换成ByteBuffer格式的数据,最后调用tflite.run()方法进行预测...="150dp" android:layout_above="@id/btn2_ll" android:hint="预测结果会在这里显示" android

3.6K41

基于Paddle LiteAndroid机上实现图像分类

机上实现图像分类 前言 Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎,多硬件、多平台以及硬件混合调度的支持上更加完备,为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力...Paddle Lite源码的根目录下执行以下两条命令编译Paddle Lite的Android预测库。 ....开发Android项目 创建一个Android项目,app/libs目录下存放上一步编译得到的PaddlePredictor.jar,并添加到app库中,添加方式可以是选择这个jar包,右键选择add...,因为训练的时候图像预处理可能不一样的,有些读者出现在电脑上准确率很高,但在手机上准确率很低,多数情况下就是这个图像预处理做得不对。...拿到图片路径之后,调用PaddleLiteClassification类中的predictImage()方法预测并获取预测值,页面上显示预测的标签、对应标签的名称、概率值和预测时间。

71987

Android显示APNG动图

三、Android显示APNG动图 这里使用了一个开源库来解析加载APNG图,apng-view 使用示例: String url = "http://xxx.png"; imageView.setOnClickListener...imageView); 效果图: [jhs51xdt38.gif] 四、apng-view源码分析 实现过程 先看看apng-view实现过程: [实现过程] (1)图片的下载/加载:通过图片加载开源库Android-Universal-Image-Loader...[batn8vbhrw.png] 源码解读 (1)prepare 先从图片文件读取这里说起,图片读取是ApngDrawable这个prepare()方法中进行的; // 文件路径:com/github...instanceof PngChunkFCTL) { fctlArrayList.add((PngChunkFCTL) chunk); // 收集帧动画控制的数据块 } } } 这个过程大体上就是解析这个...= null) apngListener.onAnimationRepeat(this); } currentFrame++; } 绘制动图的核心代码drawAnimateBitmap方法里: private

15.7K20

Android机上使用腾讯的ncnn实现图像分类

Android设备上使用PaddleMobile实现图像分类》,使用的框架是百度开源的PaddleMobile。...本章中,笔者将会介绍使用腾讯的开源手机深度学习框架ncnn来实现在Android手机实现图像分类,这个框架开源时间比较长,相对稳定很多。...开发Android项目 我们Android Studio上创建一个NCNN1的项目,别忘了选择C++支持。 ? 其他的可以直接默认就可以了,在这里要注意选择C++11支持。 ?...cpp目录下创建一个C++文件,并编写以下代码,这段代码是用于加载模型和预测图片的: #include #include #include...android:hint="预测结果会在这里显示" android:layout_height="100dp" /> <ImageView android:layout_alignParentTop

3.2K60

Android机上对https请求进行抓包

然后再到Fiddler中查看一下,你就能发现刚才手机上的网络请求包已经成功被Fiddler抓到了(有时Fiddler中显示的包信息过多,不方便查看,可以使用Ctrl+X清空信息): ?...安装完成之后再次访问必应,你就会发现不会再报错了,而是可以正常显示出网页的内容: ?...可以看到,我们是无法像之前浏览器中那样,成功抓到并解析出https请求的包信息的。 为什么会这样呢?这是因为Android7.0系统中进行了一项安全升级。...从Android 7.0系统开始,只是在手机上安装了抓包工具的证书,仍然是无法对https请求进行抓包的,还必须要在应用程序的代码中加入一段网络安全配置才行。...如果只要在手机上安装了证书就可以对所有App的https请求进行抓包,那么无疑大大降低了这些App的安全性。 因此,Android 7.0系统中才做了这项安全升级。

2.4K31

基于Tensorflow2 LiteAndroid机上实现图像分类

构造方法中,通过参数传递的模型路径加载模型,加载模型的时候配置预测信息,例如是否使用Android底层神经网络APINnApiDelegate或者是否使用GPUGpuDelegate,同时获取网络的输入输出层...要注意的是图像的均值IMAGE_MEAN和标准差IMAGE_STD,因为训练的时候图像预处理可能不一样的,有些读者出现在电脑上准确率很高,但在手机上准确率很低,多数情况下就是这个图像预处理做得不对。...以下为activity_main.xml的代码,通过按钮选择图片,并在该页面显示图片和预测结果。 MainActivity.java...拿到图片路径之后,调用TFLiteClassificationUtil类中的predictImage()方法预测并获取预测值,页面上显示预测的标签、对应标签的名称、概率值和预测时间。

2.2K10

基于Tensorflow2 LiteAndroid机上实现图像分类

技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:基于Tensorflow2 LiteAndroid...手机上实现图像分类 前言 Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。...构造方法中,通过参数传递的模型路径加载模型,加载模型的时候配置预测信息,例如是否使用Android底层神经网络APINnApiDelegate或者是否使用GPUGpuDelegate,同时获取网络的输入输出层...要注意的是图像的均值IMAGE_MEAN和标准差IMAGE_STD,因为训练的时候图像预处理可能不一样的,有些读者出现在电脑上准确率很高,但在手机上准确率很低,多数情况下就是这个图像预处理做得不对。...拿到图片路径之后,调用TFLiteClassificationUtil类中的predictImage()方法预测并获取预测值,页面上显示预测的标签、对应标签的名称、概率值和预测时间。

3.1K40

如何正确地Android机上安装国产软件?

实际上AppOpsAndroid 4.4.2之前是集成系统中的,4.4.2之后,Google不知处于何种想法将其从系统中移除了,系统自身没有权限进行管理。...好在Android自从5.0以后就加入了Android for Work功能,功能的初衷是为了让大家工作时能够使用自己的私人设备。...唤醒问题我们可以通过Island中安装绿色守护来解决。尽管是非root环境下,它依然能够强制关闭程序(原理是通过Android辅助功能模拟点击“强制停止”程序)。...而隐私问题则可以通过沙盒中安装App Ops来控制,或者同样地,可以通过电脑端adb操作,但需要注意的是由于沙盒实际上是Android中使用了多用户,因此需要在参数中指定用户: adb shell...总结 要想解决流氓app的唤醒和隐私读取问题,Xposed平台和Root后的手机上有各种简单的方案,包括Greenify与XPrivacy,而非root环境下则相对困难,我们可以使用Island创造Android

3.6K70

Android使用Notification状态栏上显示通知

使用手机时,当有未接来电或者是新短消息时,手机会给出相应的提示信息,这些提示信息通常会显示到手机屏幕的状态栏上。...Notification对象设置事件信息 (4)通过NotificationManager类的notify()方法发送Notification通知 下面通过一个具体的实例说明如何使用Notification状态栏上显示通知...:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示通知"/...="wrap_content" android:layout_height="wrap_content" android:text="这里是详细内容"/ </LinearLayout 中AndroidManifest.xml...”按钮,屏幕的左上角将显示第一个通知,如图-4.2.2.a.jpg所示,过一段时间后,该通知消失,并显示第二个通知,再过一段时间后,第二个通知消失,这时状态栏上将显示这两个通知的图标,如图-4.2.2

2.3K30

Android仿QQ状态栏显示登录状态效果

运行本实例,将显示一个用户登录界面,输入用户名(hpuacm)和密码(1111)后,单击”登录”按钮,将弹出如下图所示的选择登录状态的列表对话框, ?...单击代表登录状态的列表项,该对话框消失,并在屏幕的左上角显示代表登录状态的通知(如图) ? 过一段时间后该通知消失,同时状态栏上显示代表该登录状态的图标(如图) ?...单击”更改登录状态”按钮,将显示通知列表。单击”退出”按钮,可以删除该通知。 具体实现方法: 此处是一个登陆界面 res/layout/main.xml: <?...编写用于布局列表项内容的XML布局文件items.xml,该文件中,采用水平线形布局管理器,并在该布局管理器中添加ImageView组件和一个TextView组件,分别用于显示列表项中的图标和文字。...)).setText("登录"); } }); } /*sendNotification方法中,首先创建一个AlertDialog.Builder对象,并为其 * 指定要显示的对话框的图标、

1.2K20

Android TextView中显示图片的4种方式详解

我们知道,TextView控件一般是用来显示文本的,而图片一般是用ImageView控件来显示。 那TextView能否显示图片呢?答案是肯定的!下面列出常见的4种方式。...1、XML文件中指定属性值 这种方式应该是最常用的了,TextView的左上右下显示图片,可用 android:drawableLeft android:drawableTop android:...="@drawable/ic_launcher" android:text="hello_world" / 这种显示方式图片跟文本是居中对齐的,此种方式对应的方法是setCompoundDrawablesWithIntrinsicBounds...(10); 2、通过解析HTML来显示图片 这种方式可以显示项目中的图片、本地SDCARD和网络的图片,当然网络的图片必须先下载到本地然后显示。...以上就是Android TextView中显示图片的4种方式,每种方式都是自己的应用场景,大家根据自己的情况选择正确的方式

5.6K20

「万物生长」一个APK从诞生到活跃Android机上

其实为布局显示时留出了不同版本选择空间,如果你再看一下mipmap或者drawable还会为不同的屏幕尺寸留出了选择的余地。 Q1:R.java和resources.arsc文件作用是什么?...完成以上内容的编写,我们可能结束了代码编写,然后用了一下Android Studio中提供的各项能力。 如果不出所料,你的项目就飞快的在你的测试机上开始开心的运行了。...从图中可以得知,Proguard针对的部分是抛去系统库的,所以在混淆的图中能够发现android.support的库还是清晰的显示着,个人考虑是因为如果加上系统库进行混淆的话,可能引来奇怪的Bug。...v3(Android 9 及更高版本) v3新版本签名中加入了证书的旋转校验,即可以一次的升级安装中使用新的证书,新的私钥来签名APK。当然这个新的证书是需要老证书来保证的,类似一个证书链。...APK运行在Android机上 既然我们要开始在手机上运行了,那基本还要用上adb的工具了,这里温习一个安装的命令adb install /XXXX.apk Android里我们需要了解的的就是

90820
领券