我计划实现在一个屏幕上同时播放多个视频的功能,并且可以在播放视频时滚动视频视图。
我要将视频视图添加到充当其父视图的 ListView 中。我们不应该使用 SurfaceView 来渲染视频流,因为 SurfaceView 不能被 android 视图层次结构重绘。滚动 SurfaceView 是个坏主意。
幸运的是,TextureView 是从 API 级别 14 开始添加的,它是 SurfaceView 的替代品。所以我可以用它来实现我的计划。
但是TextureView只有API级别14以上才可用。实际上,我被要求在不低于API级别11的平台上实现这个功能。
我开始关注从 API 级别 11 开始添加到 android 的 SurfaceTexture,我们可以使用 SurfaceTexture 将相机图像流或视频解码流放到 OpenGL 纹理上,我也知道 android 视图层次结构是由 opengl 绘制的,而不是从 API 级别 11 开始的skia。
所以我想知道我是否可以使用 SurfaceTexture 将视频流渲染到普通的 android 视图上。
换句话说,我们是否可以为 api 级别 11-13 实现一个自定义的小部件来替换从 api 级别 14 开始添加的 TextureView 的位置?
我查看了android.view.TextureView的源码,不是很复杂,依赖类如下:
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 个原生 api:
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);
是否可以将TextureView类移植到android api level 11-13?
谁能给我一些建议?