问题标签 [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 投票
1 回答
2911 浏览

android - 表面支架上的凸轮图片,绘制:因表面类型而出现异常

我正在使用 aSurfaceViewSurfaceHolder在我的测试应用程序中使用相机预览开始。

我想使用 CameraPreview(随 SDK 版本 7 的 SDK 示例提供)。在 UI 上单击即可拍摄一张照片。这是Preview课程:

}

接下来我尝试CanvasSurfaceHolder. 因此我打电话给canvas = holder.lockCanvas(). 这将导致IllegalArgumentException带有消息:

现在,文档声明不推荐使用这些表面类型,设置的值将被忽略。但是,仅当我将类型设置为此特定值时,相机预览才有效。

How can I achieve drawing on the Canvas of the SurfaceView the picture taken is displayed in? Or should that be put on a different layer/view?

0 投票
1 回答
824 浏览

android - 让正在运行的 android.media.MediaPlayer 跨应用程序中的活动持续存在

我正在尝试显示一个视频流,该视频流从我的应用程序的一个活动开始,并跟随用户到应用程序中的其他活动,而无需重新准备。对活动更改稍作停顿是可以的,但不应重新启动。在一项活动中一切正常,但在切换活动时,MediaPlayer似乎不想连接到新的SurfaceHolder. 音频效果很好,几乎没有障碍。

我一直在尝试通过SurfaceView使用应用程序上下文初始化的子类来做到这一点。Button(当我改用简单的视图(例如通过 HTTP——是的,我验证了我可以正常使用 MediaPlayer 播放它),然后调用prepareAsync. 在我SurfaceHolder.CallbacksurfaceCreated方法中,我调用setDisplayand (如果玩家已完成准备)start。在surfaceDestroyed我调用的方法pause中。如果表面已经创建,我会在准备回调中调用 start。

在这一点上,我不知道该怎么做。有任何想法吗?

0 投票
2 回答
16648 浏览

android - SurfaceHolder.lockCanvas() 返回 null

我正在制作一款游戏,由于我是 Android 新手,我的设计基于LunarLander 示例代码。在其设计中,GameThread.doStart()调用 from GameActivity,然后线程从其GameThread.run()循环中运行所有内容,如下所示(为清楚起见,已删除大部分代码):

.

为了尝试解决我遇到的一些问题,我尝试将更多的控制权交给 GameActivity,如下所示:

.

除非我这样做lockCanvas()总是返回 null,因此我无法在屏幕上绘制任何内容。正如我所说,我对 Android 还是很陌生,所以我不知道为什么第二种情况不起作用。任何人都知道发生了什么或为什么它不起作用?

编辑:根据我的测试,永远不会创建表面。在此期间GameView.onResume(),我让活动等待表面被创建,然后再继续游戏,但它一直在等待。为什么第一个实例是创建表面的唯一情况?

0 投票
1 回答
130 浏览

android - Canvas 停止识别痕迹 Android

试图制作一个使用 MotionEvent.ACTION_MOVE 的画布。然而,在线程启动后,水平线绘制正确,但其他线均无效或零星。一旦我发布事件,线条就会自行清除。

[编辑] 这是因为画布嵌套在 ScrollView 中。

0 投票
2 回答
4653 浏览

android - 如果表面不在前景中,SurfaceHolder.lockCanvas 返回 null

我目前正在使用 Android 中的 LiveWallpaper 进行测试。我正在使用如下代码在画布上绘制一些东西:

这部分在正常情况下工作正常。但是,我有一个侦听器,只要在与此服务对应的设置中更改设置时,它就会执行此代码。似乎每当我从设置活动中执行此代码时,我都会得到一个NullPointer方法c.save()

似乎只有当墙纸不在前台时,holder.lockCanvas()。当它不在前景时,是否不可能绘制到这个表面?

0 投票
1 回答
1417 浏览

java - 安卓——SurfaceView。在不清除屏幕的情况下更新。(注:我是菜鸟)

我在尝试使用 SurfaceView 时遇到了一个奇怪的问题。像这个一样,它可以工作,但它会在 2 帧之间闪烁*。另外,unlockCanvasAndPost 大约需要 30-50Ms,这正常吗?

在这种情况下,每次重绘所有内容都不是一个好主意,我认为每帧重绘 350 个点不是一个好主意。

*在两帧之间闪烁:假设我在 (X,X) 处每帧画一个点,X 是帧号。我会看到点 1,1 3,3 5,5 7,7 9,9 出现在每个受损帧上,点 2,2 4,4 6,6 8,8 出现在每对帧上。

这是绘制的代码:

0 投票
1 回答
1721 浏览

android - 是否可以通过缓冲区将摄像机中的视频录制到文件中?

特别是,这是我想要的设置:Android 设备上的内置摄像头正在录制实时视频。该视频正在保存到一个缓冲区中,该缓冲区可以保存几秒钟的视频。当缓冲区已满时,缓冲区中最旧的帧将被添加到磁盘上的视频文件中,以便为来自摄像机的新帧腾出空间。然后可以使用缓冲区中的数据在视频中短暂向后跳过。

我在想我们会使用 mediaRecorder(和 mediaPlayer?)和 Surface 来分别获取视频,使用 addCallbackBuffer 创建缓冲区,然后使用 setPreviewCallbackWithBuffer 显示缓冲区中的视频。我不完全确定从那里去哪里,或者那是否完全是错误的轨道;我在这方面有点新手。

0 投票
7 回答
69975 浏览

java - Android 相机将无法工作。开始预览失败

我从 LogCat 收到这些错误:

这是活动类:

MySurfaceView 类:

CameraSurfaceView 类:

最后是 MyRender 类:

0 投票
1 回答
933 浏览

android - 取消意图选择器后重新打开相机

我创建了一个CameraView扩展的自定义相机预览视图,SurfaceView它还实现了SurfaceHolder.Callback接口。视图与相机一起操作。当您打开视图时,它会显示相机预览。在同一屏幕上,还覆盖了两个按钮 - “拍照”、“从图库中选择”。保存CameraView发布和重新打开相机的活动onPause()onResume()方法。

如果我单击“从图库中选择”按钮,则会创建以下意图:

如果只有一个活动可以响应此意图,那很好。活动自动打开,相机被释放。我也可以在画廊时进行回击,然后我将回到CameraView活动中,并恢复相机预览。

如果有多个活动可以处理这个意图,那么有趣的部分就会开始,并且会弹出意图选择器对话框。当意图选择器对话框产生,onPause()在父活动中被调用并且相机被释放时,屏幕变黑。如果我没有从对话框中选择意图,而是单击手机上的后退按钮,onResume()则会调用,但相机预览永远不会回来。要让相机预览再次显示,我需要返回上一个活动并返回预览活动。

发生以下问题是因为,当对话框被引发时,只会onPause()被调用,但如果我实际上切换到不同的活动,surfaceDestroyed()也会被调用。onResume()当使用后退按钮取消对话框surfaceChanged()并且surfaceCreated()永远不会被调用时,情况也是如此。

我的问题是如果取消意图选择器对话框,如何让相机预览重新出现。有没有办法显式触发SurfaceHolder.Callback方法?我知道有 hiddenhideSurface()showSurface()in SurfaceView,但我不想走这条路。

0 投票
0 回答
248 浏览

android - android俄罗斯方块中的错误 - getEntry

当时我和一个朋友正在为一个学校项目编写经典游戏俄罗斯方块。我已经编程了一段时间,并且已经实现了旋转和移动块,以及 newBlock、draw 等方法,所以我认为现在可能是第一次运行它的最佳时机。但后来我收到错误消息:

我正在使用一个使用自建视图(surfaceHolder/surfaceView)的线程运行它,使用方法,基本上我正在学习老师的课程,她在那里编写了一个蛇游戏。因此,随着方法的更新,它们对俄罗斯方块来说是正确的,它应该可以工作,但现在我看不到错误。任何人都知道错误消息的含义,如果需要更多信息,只需粘贴问题。

我已经添加了很多 LOG 命令,我只是从 TetrisView (surfaceView) 构造函数和 Thread 中的构造函数中获得了 LOG,所以它永远不会在任何方法中。