问题标签 [surfaceholder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1229 浏览

java - 捕获图像时 TAG_ORIENTATION 始终为 0 - Android Surfaceholder

我正在尝试Surfaceholder在 Android 中捕获图像,并希望同时支持横向和纵向照片。现在尝试了无数解决方案,其中一些适用于 HTC 设备,但不适用于三星设备。所以现在我要采用这种ExifInterface.TAG_ORIENTATION方法,因为我已经读过它也应该适用于三星设备。

我遇到的问题是,TAG_ORIENTATION无论我如何握住我的设备,似乎总是为 0。我目前使用 HTC 进行测试。我应该TAG_ORIENTATION手动设置还是什么?

并感谢反馈!谢谢

0 投票
2 回答
138 浏览

android - 使用手机的相机

我正在制作一个使用相机将数据发送到 surfaceHolder 的应用程序。但是当我调用 addCallBack() 时,我的应用程序崩溃了。这是代码:

和未实现的方法:

为什么当我调用
camHolder.addCallback(this); 时应用程序崩溃;? 我的代码中还有其他问题吗?

0 投票
2 回答
2346 浏览

android - 如何部分重绘画布?

我是新手。我使用 Canvas 制作了一个简单的游戏。我在 onDraw() 方法中编写了几乎所有的代码,那里有很多计算。在我的代码中 onDraw() 的末尾有一个 invalidate() 方法。这就是我调用重绘视图的方式。如何仅重绘 Canvas 的一部分?主要问题是我在 onDraw() 中有很多计算,它会减慢整个游戏的速度。我尝试使用像这里这样的位图:

创建位图 - stackOverflow

但它并没有解决问题,因为创建位图的过程太慢了。使用 SurfaceHolder 和 Callback 是个好主意吗?我尝试使用它,但我不知道这是否是做我想做的事情的正确方法。有谁能够帮我?如何仅部分重绘我的视图以停止始终通过新计算重绘所选元素(从保存状态绘制它们)?我只想在需要时重绘整个视图。如果有人发布可以解决此问题的代码(甚至可以是两个矩形),那就太好了。

0 投票
2 回答
11489 浏览

android - “surfaceCreated”里面的“surface has been released”

我知道这是一个常见问题,但是此堆栈跟踪显示其他问题。你可以看到,即使setDisplay(holder)在里面被调用,surfaceCreated它仍然会抛出IllegalArgumentException。这也不是一个罕见的例外,昨天在约 3,000,000 次剪辑视图中发生了约 125,000 次。我可以向您保证,它也mCurrentPlayer已正确初始化。

表面创建:

表面销毁:

堆栈跟踪:

关于还有什么可能出错的任何想法?是否SurfaceHolder可能会破坏后台线程上的表面,然后等待主线程(当前被 占用surfaceCreated)完成它的块,然后才能调用surfaceDestroyed主线程(我什至认为锁无法修复)?还有什么?

更新——深入研究后,我发现了导致“表面已被释放”的原因

android_view_Surface_getSurface可以在这里找到哪些参考资料:

这就是我缺乏 C++ 知识的痛处,它看起来像是试图锁定表面,如果不能,返回的表面将是null. 一旦返回为null,IllegalArgumentException将被抛出。

0 投票
2 回答
4678 浏览

android - 三星 Galaxy S4 流媒体视频播放方向问题

在三星 Galaxy S4 上播放视频时,视频无法识别方向元数据。它总是在风景上播放。

该应用程序还会录制视频并在流式传输时在所有其他设备上正确播放。仅当视频存储在设备中时,S4 才能正常播放,但不适用于流式传输。

在 Fragment 上使用 MediaPlayer 和 SurfaceView,而不是 VideoView。

尝试禁用 Air View、Air Gesture、Smart Stay、Smart Scroll 和 Auto Rotate,但运气不佳。

甚至还存储了方向提示以及视频以手动旋转布局中的元素,但是使用 lockCanvas 旋转时 SurfaceView 不起作用,并且在旋转其父元素时变黑并且只播放音频。

有什么建议我可以尝试修复这个错误吗?您在使用 S4 时是否遇到过同样的情况?对此的任何帮助将不胜感激。谢谢!

0 投票
1 回答
5420 浏览

android - surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) 已弃用

我正在使用 MediaRecorder 捕获视频。下面给出部分代码。

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);已弃用。有没有其他方法可以代替这种方法。我想在所有版本中运行我的代码。

0 投票
1 回答
1134 浏览

android - SurfaceView.java 中的 SurfaceHolder 使用哪个导入

我从 Android 的 SurfaceView.java 复制以下代码

我可以看到 SurfaceView.java 中使用了 SurfaceHolder:

但是,我看不到 SurfaceHolder 使用了以下哪一项导入。谁能给我解释一下。谢谢!

0 投票
1 回答
5017 浏览

java - 从相机、SurfaceView 或 SurfaceHolder 连续获取图像数据

Camera所以我用,SurfaceView和设置了这个相机预览SurfaceHolder。我还有一个ImageView我将放置相机图像的修改版本的地方,我希望它能够更新,比如说每秒一次。

当我从“res”加载图像时,所有代码都准备好了并且已经可以工作,但是我很难从相机中读取图像数据。

我已经尝试过以下操作:

  1. 创建一个intentforMediaStore.ACTION_IMAGE_CAPTURE并开始onActivityResult获取一个小缩略图(实际上对我来说已经足够了)(Bitmap)data.getExtras().get("data")

    问题是这会打开相机应用程序,您需要“手动”拍照

  2. 创建Camera.PreviewCallback,获取YuvImage,并使用 将其转换为图像YuvImage.compressToJpeg(...)

    这里的问题是,无论何时何地放置 Camera.setPreviewCallbackWithBuffer(PreviewCallback).

  3. PreviewHolder尝试通过使用锁定到画布lockCanvas()并尝试将其转换为位图来直接获取数据

    显然不起作用。

编辑: 完成这项工作的最佳方法是什么?我的意思是二维码阅读器必须连续读取相机中的图像数据,它们是如何工作的?

0 投票
0 回答
822 浏览

android - Android:如何避免 unlockCanvasAndPost 方法出错?

请任何人帮助我解释以下内容。

如何正确调用holder.unlockCanvasAndPost(canvas)方法以避免出现“Surface:unlockCanvasAndPost failed, no locked buffer”之类的错误?

我的意思是,有什么方法可以检查画布之前是否已被锁定?

目前,我有:

但我想这是不对的。

提前致谢。

在@njzk2 帖子上回答:

是的。但在我的情况下,我不得不对处理程序说,我用于从不同线程解锁画布,什么时候应该锁定和解锁。我是说:

例如,当当前和下一个图像产生淡入/淡出效果时,我可以在主线程中实现双击以立即更改图像,有时会在画布解锁之前强制停止循环。

所以,我需要通过知道它之前是否解锁来防止意外锁定,反之亦然。

再次,提前感谢任何和所有的答复。

0 投票
1 回答
2240 浏览

android - SurfaceView 在 PopupWindow 内不起作用

我将使用PopupWindow基于三星 SPen 的AirView功能显示预览

但问题是SurfaceView没有创建并且没有SurfaceHolder.Callback调用方法。

当显示弹出窗口时,表面区域变得透明,因为根本没有创建表面。

SurfaceView 没有被创建并且是透明的:

在此处输入图像描述

HoverPreview

显示预览的代码: