我有一个使用 SurfaceView 绘制动态 2D 图形的应用程序。它工作正常,但不支持我们知道的转换等。所以我去了TextureView。我的旧代码使用另一个类/线程通过 Surfaceholder.lockCanvas(); 进行绘图。所以我把它改成了TextureView.lockcanvas。当它运行时,未加速的画布(视图是)最初不会显示,但如果我触摸屏幕 onSurfaceTextureUpdated(当前没有代码内部)被调用并显示???
protected void RenderCanvas(){
//mCanvas = null;
Canvas c = null;
//synchronized (mCanvas) {
//mCanvas = null;
try {
c = mChartView.lockCanvas(null);
if (!c.isHardwareAccelerated()) {
Log.w("GVIEW", "A TextureView or a subclass can only be "
+ "used with hardware acceleration enabled.");
}
synchronized (mCanvas) {
c.drawBitmap(buffBitmap, 0, 0, null);
}
} finally {
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null) {
mChartView.unlockCanvasAndPost(c);
//mSurfaceHolder.updateTexImage();
}
}
}
我在我的 TextureView 中实现了 SurfaceTextureListener,所有的程序流程看起来都很好,一个真实的表面被交给了绘图线程
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width,
int height) {
// TODO Auto-generated method stub
isRunning = true;
mySurface = surface;
mChart.setTextureSurface(surface);
mChart.setSurfaceSize(width, height);
mChart.Redraw(true)
}
这个 void 以上面的 RenderCanvas() 结束。
除非我再次触摸屏幕,否则重绘或使视图无效也不起作用。
我不能像这样使用 TextureView 吗?
它必须是openGl内容流吗?