Android SDK-camera2-在TextureView上绘制矩形

2023-12-25

我是 android 开发的新手,我发现很难在camera2 api 上找到好的例子。

我慢慢地解决了大多数问题,但在这个问题上我陷入了困境。 在默认相机中,当您触摸屏幕进行对焦时,屏幕会短暂显示一个矩形的对焦区域。我想做类似的事情(或者在这种情况下,从完全相同的事情开始,这样我就可以弄清楚)。

我在某处读到(我认为是 SDK 文档中的 TextureView 页面),当将其用作相机预览时,您无法在纹理视图上绘制 - 并且调用 lock 方法将返回 null 而不是画布。

我在网上找到了这个:https://github.com/commonsguy/vidtry/ https://github.com/commonsguy/vidtry/但我无法让它工作。我要么收到错误消息,说我的主视图无法转换为我的可绘制视图,反之亦然 - 或者我的可绘制视图位于顶部并使屏幕变黑 - 或者它位于底部并且不会响应触摸事件(并试图强制上面视图中的 PerformClick 会导致崩溃。)

我被困住了!谁能给我一个解释或示例,说明如何在事件位置上绘制矩形几秒钟?

Thanks!


  1. 首先,对于camera2 api android示例,有开源的谷歌示例代码。https://github.com/googlesamples/android-Camera2Basic https://github.com/googlesamples/android-Camera2Basic
  2. Second, for the part where you want to draw a rectangle(touch to focus), follow these steps -
    • 创建一个扩展 SurfaceView 的自定义类。
    • 调用此自定义类中的 onTouchListener 方法来检测手指坐标并使用 android 中的 Paint 类绘制矩形。 - 在显示来自camera2的预览的TextureView上方添加此自定义类。
    • 将自定义视图变为透明。
    • 当您触摸设备屏幕上的某个点时,将调用 onTouchListener ,它将在您在相机预览上方添加的自定义视图的画布上绘制。
    • 最后,清除画布,这样您就不会继续向自定义视图添加矩形,因为您在某个时间点只需要一个矩形。
    • 另外,如果一段时间没有触摸,矩形应该会消失。使用自定义视图中的处理程序来执行此操作。

我给你一些经过测试的代码来做到这一点。我希望它对你有帮助。祝你好运。

 private class CustomView extends SurfaceView {

    private final Paint paint;
    private final SurfaceHolder mHolder;
    private final Context context;

    public CustomView(Camera2BasicFragment context) {
        super(context.getActivity().getBaseContext());
        mHolder = getHolder();
        mHolder.setFormat(PixelFormat.TRANSPARENT);
        this.context = context.getActivity().getBaseContext();
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.STROKE);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            invalidate();
            if (mHolder.getSurface().isValid()) {
                final Canvas canvas = mHolder.lockCanvas();
                Log.d("touch", "touchReceived by camera");
                if (canvas != null) {
                    Log.d("touch", "touchReceived CANVAS STILL Not Null");
                    canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                    canvas.drawColor(Color.TRANSPARENT);
                    canvas.drawCircle(event.getX(), event.getY(), 100, paint);
                    mHolder.unlockCanvasAndPost(canvas);
                    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            Canvas canvas1 = mHolder.lockCanvas();
                            if(canvas1 !=null){
                                canvas1.drawColor(0, PorterDuff.Mode.CLEAR);
                                mHolder.unlockCanvasAndPost(canvas1);
                            }

                        }
                    }, 1000);

                }
                mHolder.unlockCanvasAndPost(canvas);
            }
        }

        return false;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android SDK-camera2-在TextureView上绘制矩形 的相关文章

随机推荐

  • 是我的类内装饰器不够 Pythonic 还是 PyCharm 在 lint 警告方面不够智能?

    我想在类中定义一个装饰器 我不想将它定义为一个单独的 独立的函数 因为这个装饰器是专门针对这个类的 我想将相关的方法保留在一起 这个装饰器的目的是检查一些先决条件 特别是成员变量持有的数据库连接 SSH连接等是否仍然可用 如果不是 则不会调
  • imshow(img, cmap=cm.gray) 显示 128 值的白色

    我正在从 MatLab 转向 python 并使用 imshow 函数 我似乎无法理解为什么它不将值 128 显示为灰色 而我选择了 cmap 为灰度 看起来它使用最高 128 和最低值的灰度 我希望它使用 0 255 的灰度 我怎么做 U
  • Objective-C – UILocalNotification AlertBody 长度

    我正在寻找一些文档来找到最大长度alertBody of a UILocalNotification之前它会被剪辑在通知中心 横幅 或弹出警报中 I haven t found any specific limit documented H
  • 我应该使用哪个 HTML5 标签来标记作者姓名?

    例如博客文章或文章
  • 如何将对象从其基类转换为其子类

    我有课User这是类的子类PFUser class User PFUser var isManager false 在我的一种方法中 我收到了PFUser对象 我想将其转换为User object func signUpViewContro
  • tf.zeros() 的动态大小(与无尺寸的占位符一起使用)

    考虑以下代码 x tf placeholder float shape 42 4 y tf zeros 42 4 float xy stacked tf concat 1 x y print x get shape print y get
  • Flutter PDF 中古吉拉特语字体渲染问题

    我正在使用 Flutter 2 0 开发移动应用程序 整个应用程序采用古吉拉特语 应用程序已准备就绪 所有文本都在应用程序中完美呈现 但是当我从屏幕上的数据生成 pdf 时 古吉拉特语字体不正确渲染 我正在使用插件 pdf 3 0 1 fo
  • 指定默认下载文件夹 - 可能使用 JavaScript?

    我们目前正在开发一个基于网络的应用程序 该应用程序需要通过浏览器下载文件 理想的情况是让这些文件最终位于文件系统上的特定位置 有没有办法使文件保存和文件打开对话框默认为特定文件夹 例如 USER Downloads MyApp 我不希望它成
  • Nanoc布局编译规则

    我正在使用nanoc 我希望我的index html指向特定的布局 所以我创建了该布局 它被称为nosidebar html 我的规则如下 compile index html do layout nosidebar end 这似乎不起作用
  • 如何使用 vue-test-utils 打开 bootstrap-vue 模式?

    我使用 bootstrap 作为我的设计框架 并且一直在使用 bootstrap vue 现在我想实现一些测试来配合我的组件 我正在编写一个非常简单的测试来确保打开模式 我在 vue test utils 中使用什么来打开 bootstra
  • Spring security 具有多个登录页面

    我正在使用 Spring security 使用用户名和密码来安全登录应用程序管理部分 但现在我的客户需要为应用程序客户端部分提供另一个登录屏幕 他们将在其中拥有自己的用户名 密码来登录客户端部分 到目前为止 我已经使用以下 spring
  • 四次函数的根

    我在进行一些高级碰撞检测时遇到了一种情况 需要计算四次函数的根 我使用法拉利的通用解决方案编写了一个似乎运行良好的函数 如下所示 http en wikipedia org wiki Quartic function Ferrari 27s
  • VBA如何在没有.Select的情况下复制单元格的内容

    我正在写一个方法 可以采用Target并将单元格完全粘贴到另一个单元格中 该单元格是一个带有一些奇特格式的运输标签 我有办法做到吗 原来我有这个 Worksheets Label Range A1 Value Worksheets Get
  • 使用 getSupportFragmentManager() 时 findFragmentByTag() 返回 null

    我正在使用支持库 ActionBar 因为我使用的是较旧的最小 SDK 在活动中 我使用 FragmentTabHost 因为我有 3 个选项卡 ActionBar 还有一个 SearchView 因此当进行搜索时 第三个选项卡将与搜索结果
  • Android独特的闪屏:如何让它充满屏幕?

    我有一个独特的启动画面 名为splash png 尺寸为1280x1280 150dpi 我用react native bootsplash在我的 React Native 项目中 但我认为这并不重要 我的问题很简单 如何使我的启动画面在纵
  • Android 应用程序正在安装两个启动器图标

    This is not的副本Android 应用程序创建两个启动器图标 https stackoverflow com questions 8697943 android application creating two launcher
  • 如何从我们的 Android 应用程序中删除其他应用程序缓存?

    我正在尝试开发一个可以删除其他应用程序缓存数据的Android应用程序 我尝试浏览所有博客 但没有一个对我有用 我可以通过以下代码清除我的应用程序的缓存 File cache getCacheDir File appDir new File
  • 用户警告的堆栈跟踪

    我在日志中看到这样的警告 py warnings init WARNING bs4 init py 219 UserWarning foo looks like a filename not markup You should probab
  • func 中返回空,golang 中返回值[重复]

    这个问题在这里已经有答案了 我正在阅读一些编写的代码Golang在Github上发现了一段非常有趣的代码 我把它简化得更清楚了 func Insert docs interface err error for i 0 i lt 3 i er
  • Android SDK-camera2-在TextureView上绘制矩形

    我是 android 开发的新手 我发现很难在camera2 api 上找到好的例子 我慢慢地解决了大多数问题 但在这个问题上我陷入了困境 在默认相机中 当您触摸屏幕进行对焦时 屏幕会短暂显示一个矩形的对焦区域 我想做类似的事情 或者在这种