是否可以将 class TextureView 移植到 Android Honeycomb

Is it possible to transplant the class TextureView to Android Honeycomb

我计划实现在一个屏幕上同时播放多个视频的功能,并且可以在播放视频时滚动视频视图。

我要将视频视图添加到充当其父视图的 ListView。我们不应该使用 SurfaceView 来渲染视频流,因为 SurfaceView 不能被 android view hierarchy 重绘。滚动 SurfaceView 是个坏主意。

幸运的是,TextureView 是从 API 级别 14 开始添加的,它是 SurfaceView 的替代品。所以我可以用它来实现我的计划。

但是TextureView只能在API level 14以上使用。事实上,我被要求在不低于API level 11的平台上实现此功能。

我开始关注自 API 级别 11 以来添加到 android 的 SurfaceTexture, 我们可以使用 SurfaceTexture 将相机图像流或视频解码流放到 OpenGL 纹理上,我也知道 android 视图层次结构是由 opengl 而不是 skia 绘制的,因为 api 级别 11.

所以我想知道是否可以使用 SurfaceTexture 将视频流渲染到普通的 android 视图上。

换句话说,我们可以为api level 11-13实现一个自定义的widget来替换自api level 14以来添加的TextureView的位置吗?

我看过android.view.TextureView的源码,不是很复杂,依赖class如下:

package android.view;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
import android.os.Looper;
import android.util.AttributeSet;
import android.util.Log;

并且有 4 个本地 apis:

private native void nCreateNativeWindow(SurfaceTexture surface);
private native void nDestroyNativeWindow();

private static native boolean nLockCanvas(int nativeWindow, Canvas canvas, Rect dirty);
private static native void nUnlockCanvasAndPost(int nativeWindow, Canvas canvas);

是否可以将classTextureView移植到androidapi11-13级?

谁能给我一些建议?

您应该试试surfaceView,它可以解决您的问题。

如果您无法处理,请使用您的源代码编辑您的问题。

我不能给你一个明确的答案,但我怀疑你是否可以直接将它放入你的应用程序中。反射访问私有 APIs.

可能是可能的

我看不出这样做有什么价值。如果您查看 version dashboard,您会发现 Gingerbread 及更早版本约占活跃设备的 5.9%(截至 2015 年 7 月 7 日),因此即使您使用 API 10,您也会只会将您的市场份额增加几个百分点。 API 11 中引入了硬件加速视图功能,因此我预计让 TextureView 在 API 10 中工作将更具挑战性。 API 11 甚至没有在仪表板中被调用 -- 据我所知,获得 Honeycomb 的少数设备都符合升级到 ICS 的条件。

(您希望 API 11 与 API 14 支持哪些特定设备?那里没有那么多未升级的摩托罗拉 Xoom。您有 API 11 个设备来测试?)

缺少 API11 源代码使事情变得更加复杂。 Honeycomb 的消息来源从未公开过。所以你会在黑暗中摸索着让它工作。

我认为你最好的选择是拒绝任何提出请求的人。