4

我有一个使用 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内容流吗?

4

0 回答 0