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

android - Android中surfaceView回调调用surfaceChanged时尺寸不一致

我正在使用 SurfaceView 绘制到屏幕的一部分,从而使用后台线程更新绘图。surfaceview 实现了一个 SurfaceView.callback。

在 onDraw 方法中,我使用 canvas.drawpont(x,y,paint) 并逐个像素地绘制到几乎整个画布,因此在大屏幕上可能会非常密集。无论如何,如果我在横向和反向横向之间快速旋转手机,我会得到一个非法参数异常。如下:

在 313 的 SpecGugaeupdate 上,我有:

mHolder 是我的 SurfaceHolder。当然,在调用 onDraw 之前我也锁定了画布。

如果我在各个方向缓慢旋转,此方法将完美无缺,但是,当我在两个景观状态之间快速旋转 180 度时,它会触发此非法ArgumentException。在监控surfaceChanged中的宽度和高度时,我注意到当我快速旋转时,横向的宽度与纵向的高度配对。例如,在我的手机 (Motorola atrix) 上,SurfaceView 的纵向尺寸为 540x307 (WidthxHeight),横向尺寸为 960x172。当我在横向和反向横向之间快速旋转时会发生这种情况:

慢慢旋转到横向:

快速旋转以反转景观,表面变化被调用两次。

我尝试过覆盖 onMeasure,宽度和高度与 SurfaceChanged 的​​相同。因此,我似乎正在尝试在尚未准备好但已准备好将其锁定到我的 Holder 的画布上进行绘制。任何想法都会很棒,谢谢你的时间。

此外,在我的 surfacedestroyed 中,我正在处理我的线程,如下所示:

这会阻止线程执行 onDraw。

0 投票
1 回答
3723 浏览

java - Android:surfaceView 在 onCreate() 中不能 getHolder(),必须在 onResume() 中

在我的活动中,我有一些观点和一个surfaceView.

这是我的第一个代码onCreate()

如果我通过取surfaceView并更改上面getHolder()的代码onResume()(我已经尝试了很多次得到这个结果),没有错误:


请为我解释。

0 投票
2 回答
9886 浏览

android - Android:holder.getSurface() 总是返回 null

我的视图是一堆普通的小部件和一个表面视图。我不知道为什么在我得到surfaceholderSurfaceView 并getSurface()在持有人上再次使用后,我总是会返回 null。

这是我的示例代码:

当我看到 Android 文档的getSurface()方法时。它是这样说的:

直接访问表面对象。Surface 可能并不总是可用——例如,当使用 SurfaceView 时,在视图附加到窗口管理器并执行布局以确定 Surface 的尺寸和屏幕位置之前,不会创建持有者的 Surface。因此,您通常需要实现 Callback.surfaceCreated 以了解 Surface 何时可用。

我不太了解这一点,但我知道我错过了一些东西。请为我解释一下,并告诉我Callback.surfaceCreated手段,以及如何实施?

谢谢 :)

0 投票
4 回答
7819 浏览

android - 更改 Android 自定义 SurfaceView 的大小

我正在尝试为 Android 应用程序创建 2D 游戏引擎。我已经按照本教程进行操作,它可以很好地创建全屏显示,但我不希望这样。我想让我的视图占据屏幕的顶部 2/3(或其他),并用标准的 Android 小部件(按钮、文本输入等)填充底部的三分之一。我不能让它工作。我能得到的最好的结果是一个空白屏幕。我尝试了许多排列,包括使用外部 LinerLayout,然后将自定义 SurfaceView 嵌入嵌套的 RelativeLayout 中,并将 Android 小部件放入嵌套的 LinearLayout 中,但它不起作用。

例如,这会产生一个白屏,当我觉得它应该是 SurfaceView 的 50%,TextView 的 50% 时:

活动主.xml:

MainActivity.java:

有任何想法吗?

0 投票
3 回答
14690 浏览

android - Android Camera - app passed NULL surface

Whenever I run the cam_thread I get the error "app passed NULL surface". This code supposedly works on the HTC Incredible 1. I've reconfigured it slightly to run on a droid x. However I still get this error.

Main Thread

Cam_Thread

Manifest

This original code was written by Dr. Oros. http://www.cogsci.uci.edu/~noros/android_car.html

0 投票
0 回答
2767 浏览

android - 如何构建自定义的摄像机应用程序?

我正在尝试开发自定义摄像机录像机。当我的设备在 Activity 的 beginRecording() 中执行 start MediaRecorder 方法时,应用程序崩溃。我不知道出了什么问题,因为我遵循Google API Guide。我的设备使用 Android 2.3 或更高版本。在我的 Nexus S 4.1.1 中执行正常,但在我的 Xperia 2.3.3 中没有运行,显示此跟踪。

我的代码是:

跟踪错误是:

更新:

我已经修复了这个错误。主要代码是:

但现在,我还有其他问题。当我在 2.2 和 2.3.3 版本的设备中安装应用程序时,因为在此版本中不支持以下行: mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 如果我更改代码:CamcorderProfile.QUALITY_LOW,则设备以最低质量记录。

我必须更改 2.2 和 2.3 版本中的代码:

为什么我必须这样做,当在 Android API 中,setProfile() 方法在 2.2 中可用并且设备应该以更高的质量记录可以支持?

更新2:

在 initCamera 方法中,我改变了:

在 2.3 版本的设备中,我可以使用该行来检测视频配置的分辨率: mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 但在某些设备(如 HTC Desire)中,不支持此配置。

对于 2.2 版本,可以接受 AAC 音频编码器吗?因为我的 HTC Legent 不支持这个音频编码器?UPDATE3:Android 2.2 版本不支持 ACC 音频编码器。

0 投票
1 回答
558 浏览

android - SurfaceView + Canvas,从一种颜色淡入另一种颜色

我有

我想使用 SurfaceView + Canvas 方法从列表中的一种颜色淡化到另一种颜色。这是我的尝试:

我觉得这应该按原样工作,并从第一种颜色褪色到第二种颜色,依此类推......最终循环,但相反,它从第一种颜色开始,然后褪色到一些不相关的颜色,结束超过。(我也测试了不同的数据)。这是我第一次使用 SurfaceView,所以我不确定我的画布方法是否正确。使用 Log.d,我看到一旦它进入一个内部 for 循环(前面带有“if”语句的循环),它就不会离开那个 for 循环......这对我来说没有意义但我认为这与画布和支架有关。帮助?

0 投票
1 回答
279 浏览

android - 在 Android 中创建 GameLoop

我正在此应用程序中创建与 GameLoop 相关的应用程序,如果用户单击屏幕,则在屏幕上绘制图像并且它以随机速度和随机方向在屏幕上移动。在代码中没有错误但是当我尝试运行该应用程序时,我最终遇到了强制关闭错误。

这是我的源代码:

源代码:GameLoop.java

源代码:Sview.java

源代码:ViewThread.java

源代码:elements.java

我得到的错误是:

提前致谢...

0 投票
1 回答
4189 浏览

android - 在android的SurfaceView上渲染字节数组

嗨,我有一个原始图像转储,我存储为字节数组,我必须在表面视图上显示它。我试图将此字节数组转换为可变位图并在表面支架的画布上渲染,但在调用“drawBitmap”函数时出现此空指针异常。

BlockquoteE/AndroidRuntime(28358): 致命异常: main E/AndroidRuntime(28358): java.lang.NullPointerException E/AndroidRuntime(28358): at android.graphics.Canvas.throwIfRecycled(Canvas.java:1025) E/AndroidRuntime(28358) ): 在 android.graphics.Canvas.drawBitmap(Canvas.java:1065) 块引用

这就是我尝试渲染字节数组的方式

0 投票
1 回答
23812 浏览

android - java.io.IOException:setDataSource 失败。:状态=0x80000000

我正在尝试在活动中使用媒体播放器播放 url:

它工作正常。@onSurfaceCreated我用相同的代码将其设置为 in中的动态壁纸WallpaperService,它给了我以下错误日志

如果我使用本地视频 uri 设置动态壁纸..它工作正常。

有什么想法/建议吗?