问题标签 [textureview]

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 回答
1035 浏览

android - 为什么要使用 SurfaceView 或 TextureView 进行自定义绘图?他们的 Canvas 没有硬件加速

所以我正在为动画制作一些 Canvas drawText、drawPath、drawArc、drawLine 和 drawCircle...

使用 SurfaceView,做 lockCanvas 和 unlockCanvasAndPost,最终发现绘制到画布需要 > 16ms 说 20 次中有 1 次

硬件绘制时间?0-2毫秒

那么为什么Lunar Lander <3 SurfaceView?我认为我永远无法击败硬件加速画布和软件减速画布。

0 投票
1 回答
2094 浏览

android - MediaCodec 和 TextureView 的 Z 顺序问题

在我的 Android 应用程序中,我需要使用以下 Z 顺序渲染三个视图:

  1. 在底部,MediaCodec覆盖整个屏幕的解码器的输出表面。我有要求我必须转换由MediaCodec(例如缩放它)产生的图像
  2. 在中间,一个GLSurfaceView(或我定义的其他运行 GL 着色器的表面/视图)覆盖整个屏幕。显然,这一层中的一些像素将是透明的,以便看到MediaCodec下面的输出。
  3. 最重要的是,任何其他视图 - 比如说ImageView. 不确定我是否需要这些最顶层视图的透明度,也许完全不透明的矩形视图是可以的——它们只是不会覆盖整个屏幕并且会四处移动。

看起来这是不可能的,但也许我错过了一些东西,或者有一种方法可以在较低级别上付出更多的努力(例如 EGL 上下文或类似的东西......我目前不明白)。

我无法让它工作并且担心这是不可能的原因是:

  • 对于底部MediaCodec输出层 (1),我必须能够转换图像。所以,我给 MediaCodec 渲染的表面必须来自TextureView
  • 为了能够看穿中间GLSurfaceView(2)的透明像素,我必须调用GLSurfaceView.setZOrderOnTop(true). 否则 GLSurfaceView 是不透明的。
  • 但是调用GLSurfaceView.setZOrderOnTop(true)意味着没有其他视图 (3) 呈现在GLSurfaceView. 例如,一个ImageView将始终出现在 的不透明像素后面GLSurfaceView

看起来调用GLSurfaceView.setZOrderMediaOverlay(true)而不是GLSurfaceView.setZOrderOnTop(true)旨在解决这个问题并促进这种类型的 Z 排序。如果最底层的MediaCodec输出层是SurfaceView. 但我需要它是一个TextureView,所以我可以改变它。当它下面GLSurfaceView.setZOrderMediaOverlay(true)有一个时似乎不起作用:它被中间层完全遮挡,而不是通过透明像素显示。TextureViewTextureViewGLSurfaceView

这种 Z 排序是不可能的,这是否正确?还是可以通过搞乱 EGL 和上下文等来完成?

0 投票
1 回答
1416 浏览

android - 带有 MediaPlayer 的 Android TextureView 不会为每一帧更新

我正在使用 Android MediaPlayer 在 TextureView 上播放视频文件。我计算了 onSurfaceTextureUpdated 回调的次数,在某些设备上它小于视频的帧数,而在其他设备上它达到了总帧数。为什么会这样?表面纹理不应该为每一帧更新吗?可能是 TextureView 还是编解码器实现问题?

0 投票
2 回答
5568 浏览

java - 如何在关闭应用程序之前停止纹理视图侦听器并显示图像

我有一个简单的 xml 布局,如下所示,FrameLayout 中只有一个 TextureView。

以及以下主要活动:

}

对于每一帧,我都会做一些详细说明,没关系。我想要的是添加一个按钮来停止相机并在 TextureView 中显示从 sdcard 加载的文件。

它的伪代码可以是这样的:

可以在不修改 xml 布局的情况下做到这一点吗?提前致谢!

0 投票
0 回答
493 浏览

java - 预览停止后,位图在表面视图中未正确显示

大家好,我有以下布局:

使用 TextureView 和 SurfaceView(我想我可以消除 SurfaceView,但我现在不知道如何)。

以下主要活动:

公共类 MainActivity 扩展 Activity 实现 TextureView.SurfaceTextureListener {

}

该程序运行良好(它拍摄了一些照片,详细说明它们并保存在 mSnapDir 目录中的输出“combined.jpg”文件中)直到几乎结束,即调用 onElaborateClicked(View view) 时。它正确地进行了详细说明并停止了预览,但是当我尝试在屏幕上显示位图时它不起作用。我添加了 SurfaceView 来调用 getHolder() (也许有一个最简单的方法)。

问题是:

1)为什么不显示位图(它存在!)?也许 SurfaceView 在 TextureView 的“背面”并且从未显示?

2) 我可以避免添加 SurfaceView 并直接在 TextureView 上完成所有工作吗?我添加 SurfaceView 只是为了显示最终的位图(我不知道其他地方该怎么做)。

任何帮助将不胜感激。提前致谢!

0 投票
2 回答
2233 浏览

android - Android纹理视图闪烁

在下面的应用程序中,由于某种原因,屏幕总是闪烁,文本上方也有绘图伪影。有可能解决这个问题吗?我在 Nexus 7 设备上运行 Android 4.4.2。

0 投票
1 回答
1832 浏览

android - 如何使用 Android 的“Surface”类?

Surface、SurfaceHolder、EGLSurface、SurfaceView、GLSurfaceView、SurfaceTexture、TextureView有详细解释吗?尤其是:

  • SurfaceView 和 TextureView 有什么区别?
  • 我是否需要使用 GLSurfaceView 才能使用 OpenGL ES?
  • Surface 和 EGLSurface 如何交互?
  • SurfaceTexture 有什么作用?
  • 为什么我在 SurfaceView 上绘制的内容必须高于或低于其他所有内容?
  • 什么是 SurfaceFlinger?
  • 状态栏和导航栏的组成如何工作?
  • 在此过程中,在 Android 上构建游戏循环的正确方法是什么?
0 投票
1 回答
3095 浏览

android - Android TextureView OpenGLRenderer:GL_INVALID_OPERATION

我有两个片段,它们有一个 TextureView 来显示相机预览或播放视频。

使用该应用程序一段时间后,玩屏幕后,我在 logcat 中收到此错误

我从我的片段中释放所有内容,所有成员都设置为空。

我看到整个视图变得很奇怪......

我错过了什么?

在此处输入图像描述

0 投票
2 回答
371 浏览

android - 如何在 Android 中通过不同的按钮点击在同一 Activity 中播放原始文件夹中的 3 个视频?

Buttons我必须在相同的 3 个不同的视频上播放三个视频Activity

我的第一个视频被播放,如果我播放另一个视频,最后一个屏幕截图(如图像)出现在前景中,当前视频在屏幕截图后面播放,如前一个视频的图像。

请帮助我,我之前问过这个问题并给出了这个http://blog.lemberg.co.uk/surface-view-playing-video解决方案,但这对我没有帮助..

我尝试过以不同的方式播放此视频,Activity并且在视频完成后,它涉及上一个活动。但根据我目前的代码结构,它不适合我..

0 投票
1 回答
1775 浏览

android - 手动绘制到 MediaPlayer 的表面

我将 TextureView 设置为 MetoaPlayer 来播放视频:

视频播放正常。

但是当我尝试在表面上绘制很多时,视频播放没有开始!

当我在媒体播放器上调用 play() 时,播放没有开始。

我想,Surface 移动到无效状态并且 MediaPlayer 无法播放视频。但是 logcat 是空的。有任何方法可以使用媒体播放器在同一表面上绘图。