我计划在一个屏幕上实现同时播放多个视频的功能,并且可以在播放视频时滚动视频观看。
我要将视频视图添加到作为其父视图的ListView中。我们不应该使用SurfaceView来渲染视频流,因为SurfaceView层次结构无法重绘SurfaceView。滚动SurfaceView是一个坏主意。
幸运的是,自API级别14以来添加了TextureView,它是SurfaceView的替代品。所以我可以用它来实现我的计划。
但是TextureView仅在API级别14之上可用。实际上,我被要求在不低于API级别11的平台中实现此功能。
我开始关注自API级别11以来添加到android的SurfaceTexture, 我们可以使用SurfaceTexture将摄像机图像流或视频解码流放到OpenGL纹理上,我也知道自api级别11以来,opengl而不是skia绘制了android视图层次结构。
所以我想知道我是否可以使用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 11-13级?
谁可以给我一些建议?
答案 0 :(得分:1)
我不能给你一个确定的答案,但我怀疑你可以放入你的应用程序。可以通过反射访问私有API来实现。
我看不出这是多么值得。如果您查看version dashboard,您会看到Gingerbread及其早期版本约占活动设备的5.9%(截至2015年7月7日),所以即使您使用API 10也可以使用它,您只会增加市场份额减少了几个百分点。 API 11中引入了硬件加速的View功能,因此我希望在API 10中使用TextureView会更具挑战性。 API 11甚至没有在仪表板中调出--AFAIK少数获得Honeycomb的设备都有资格升级到ICS。
(您希望在API 11与API 14中支持哪些特定设备?那里没有那么多未升级的摩托罗拉Xooms。您是否有要测试的API 11设备?)
使事情变得更复杂是缺乏API 11源代码。 Honeycomb的消息来源从未发布过。所以你会在黑暗中做很多摸索,试图让它发挥作用。
我认为你最好的选择是拒绝任何提出请求的人。
答案 1 :(得分:0)
您应该尝试使用surfaceView它可以解决您的问题。
如果您无法使用源代码处理编辑问题。