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