问题标签 [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 回答
1098 浏览

android - 使用 SurfaceView 的相机应用程序崩溃

应用程序在 SurfaceCreated 的 setPreviewDisplay(holder) 崩溃(在任何事情开始之前,必须强制关闭一个对话框,然后应用程序退出),我不知道为什么。请指教。下面是我的代码。

0 投票
2 回答
6493 浏览

android - 在 Android 中为 SurfaceView 设置背景颜色

我正在为 android 构建一个绘画应用程序。扩展 SDK 提供的 FingerPaint 应用程序示例。但是,与 FingerPaint 不同的是,我使用带有单独渲染线程的 SurfaceView 来绘制到表面。所有这些都是非常标准和直接的。工作得很好。但是,我想为绘画表面提供白色背景,所以它就像在白纸上绘画一样。默认背景为黑色。我的表面视图的线程调用视图的 onDraw() 方法。

我在这里面临的问题是,如果我为我的 SurfaceView 设置背景颜色或背景资源,那么当下次渲染视图时,这个背景会覆盖之前的表面绘制。我将用一个例子来解释这一点:

假设我将背景设置为白色。现在,应用程序启动,我的 SurfaceView 具有白色。好的,到目前为止还不错。现在,我用手指在这个表面上画了一条红色的线。这条线现在显示在白色表面上。好的。现在,这应该是一个绘画应用程序,假设我想画一辆汽车。所以,然后,我用手指画出我的第二条红线。屏幕上绘制了第二条线,但我之前绘制的第一条线消失了。也就是说,因为我为 SurfaceView 设置了一些背景,所以再次绘制了背景,从而覆盖了绘制的第一行。现在屏幕只显示绘制的第二条线。

显然,我不希望这种情况发生。当我不尝试更改背景时,代码完美运行(也就是说,两条线都显示在默认的黑色背景上,没有有效的背景)。但是当我设置一些想要的背景时,就会发生这种情况。有没有办法以某种方式获得静态背景,而不是每次都绘制?我希望只绘制一次背景,所有后续的绘图都应该这个背景上发生。我不希望 android 运行时在每次绘制我的视图时绘制背景,从而从以前的渲染中覆盖该视图上存在的所有绘图。有什么办法可以解决这个问题?

我尝试过的事情是:

  1. 在 XML 中使用 android:background 设置我的 SurfaceView 的背景颜色。

  2. 做以上,使用风格的概念。(指定样式值并在布局文件中引用它)。该样式只是将背景颜色定义为#FFFFFFFF(白色)。

  3. 将样式2设置为SurfaceView的父视图(一个RelativeLayout)。

  4. 在我的清单文件中使用 android:theme 将 2 的样式设置为整个应用程序,作为主题。

  5. 将我的 SurfaceView 的背景可绘制对象设置为纯白色的图像。

  6. 从代码中调用我的 SurfaceView 的 setBackgroundColor,this.setBackgroundColor(Color.WHITE)。

谢谢。

0 投票
1 回答
826 浏览

android - SURFACE_TYPE_NORMAL 是有效的 Android 相机类型吗?

我正在构建一个增强现实应用程序,该应用程序从相机中获取帧,使用一些图像处理技术对其进行过滤,并将它们显示给用户以代替相机预览。

当我第一次开始时,我只是在打电话:

在回调中,我执行以下操作:

这工作得相当好,并且在摩托罗拉 Photon 上表现不错。

我还拥有摩托罗拉 Droid 和 LG Optimus;在这两个设备上, onPreviewFrame永远不会被调用,因此持有者永远不会在回调中被绘制。并且用户会卡在黑屏上。

搜索了一圈后,我发现需要添加以下行

有了这条线,我终于得到了回调。但问题是,如果我尝试调用holder.lockCanvas()我会收到错误,因为SURFACE_TYPE_PUSH_BUFFERS.

现在我已经能够通过将一个ImageView放在顶部SurfaceView并将框架绘制到该上来解决这个问题ImageView。但是与使用SURFACE_TYPE_NORMAL.

我的问题是:

  • SURFACE_TYPE_NORMAL有效的可用类型,还是我只能信任SURFACE_TYPE_PUSH_BUFFERS
  • 如果是这样,是否可以确定设备是否支持SURFACE_TYPE_NORMAL,以便我可以从支持的设备中挤出额外的性能?是否有特定的 Android 版本或支持它的制造商?

作为旁注,我了解 Honeycomb (3.0) 不再支持这些值。但它们对于 2.3 及更低版本是必需的。同样对于 ICS (4.0),新SurfaceTexture管道的速度非常快。但我仍然希望至少支持 2.2 和 2.3。

0 投票
0 回答
520 浏览

android - 如何在扩展广播接收器的类中使用表面支架打开相机

我的课程扩展了广播接收器。我想在 ICS 中打开手电筒,只有当你有一个表面视图时才可能。我怎样才能制作一个可以打开手电筒的小部件!谢谢!这个代码是不正确的!请帮助我是初学者安卓!

公共无效onReceive(上下文上下文,意图){远程视图视图=新远程视图(上下文.getPackageName(),R.layout.camera_widget);

0 投票
3 回答
5911 浏览

android - .setPreviewDisplay(holder) throwing null pointer exception

I am developing a custom camera application.Given below is my Activity class.

Given below is my main.xml

And this is my CameraPreview class

Here

code is throwing null pointer exception...i cant fix that.please tell me why it is throwing exception and how can i fix that?

0 投票
1 回答
1049 浏览

android - 在缩放的 SurfaceView 中更改插值方法

可以以低分辨率渲染视图,然后setFixedSize()使用SurfaceHolder. 但是,缩放是通过某种插值完成的,导致一切都变得模糊。
有什么方法可以将插值方法更改为最近邻居或将其关闭?

这是我的意思的一个例子,在全屏视图中使用 4x4 表面制作:
我想要的是 我得到了什么
左图:这是我希望结果的外观(这里通过绘制未过滤的位图来实现)
右图:这是当4x4 画布缩放为全屏。

如果有人感兴趣,用于生成正确图像的示例代码:

注意:上面的方形图案只是我想要避免的效果的一个例子。我正在寻找一个通用的解决方案,可以应用于任何内容的任何视图(带有表面支架)。

0 投票
1 回答
126 浏览

android - 如何将所有视图都集中在一个视图中?

我需要将布局中的每个视图传输到该布局的其他位置...所以我需要一些东西来将每个视图放入其中,并且只移动它...我该如何管理?(这可能太容易了,抱歉,但我在 android 上很新。我听说过类似“holder”的东西,但我不确定它是否可以移动

提前感谢您的帮助!

将每个视图放在另一个相对布局中,但现在我看不到视图?

xml文件:

0 投票
1 回答
26691 浏览

android - SurfaceHolder.setType 已弃用...但需要吗?

无效 android.view.SurfaceHolder.setType(int 类型)

public abstract void setType (int type) 自:API Level 1

此方法已弃用。这被忽略了,这个值在需要时自动设置。

设置曲面的类型。

http://developer.android.com/reference/android/view/SurfaceHolder.html

它说它是自动设置的,但是没有它我的视频无法播放。这里发生了什么?有什么东西可以代替它吗?我有时间让视频在 Android 上正确播放。

0 投票
1 回答
728 浏览

android - 拍完照片后,如何通过 camera.startPreview 重新使用surfaceHolder?

已解决:问题与 Android 相机或 SDK 无关,而是我自己的逻辑来确定相机和表面是否都准备好了。

我有一种情况,我有一个存在于活动布局 xml 中的 SurfaceView,我向其中添加了一个回调,以便我可以知道 SurfaceHolder 何时准备好充当我的应用程序的相机预览窗口。这部分工作得很好。我得到一个预览窗口,可以使用所有与相机相关的普通方法和回调来拍摄和存储图像。

问题是,在用户拍摄完照片后,他们会收到一个按钮提示,该按钮允许他们立即拍摄另一张照片,而无需先打开他们刚刚拍摄的照片的预览窗口……这就是我的问题所在!当我尝试使用已经创建的 surfaceHolder 实例第二次调用 camera.startPreview 时,我没有得到任何预览。

如何重复使用相同的surfaceHolder?有什么方法可以强制 SurfaceView 销毁并重新创建当前持有者?

0 投票
1 回答
93 浏览

java - 将元素添加到列表时 Android 应用程序崩溃

我有一个这样定义的元素列表:

当按下屏幕按钮时,我运行:

这应该会更改 newBullet 元素的属性,并将其副本添加到子弹列表中。但是,一旦我这样做,应用程序就会崩溃。

这里的线程部分:

产生异常并且程序关闭。我不知道为什么将已经生成的元素添加到列表中会使程序崩溃。任何帮助表示赞赏。

-内森