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 コンテンツ ストリームである必要がありますか?