私はAndroidでSurfaceViewを試していますが、タッチして「描画」する単純な描画タイプのアプリケーションを作成しようとしています。キャンバスへの描画を処理するためにスレッドを実行していますが、パフォーマンスの問題が発生しています。http://developer.android.com/guide/topics/graphics/index.htmlで、サーフェス全体を再描画する必要があることを読んだので、タッチしたすべてのポイントをフロート配列mPointsに格納して、毎回再描画してみました。問題は、多くのポイントが蓄積されると、それが本当に遅くなることです。そのためのコードは次のとおりです。
@Override
public void run() {
while(mIsRunning) {
Canvas c = null;
try {
c = mSurface.lockCanvas(null);
synchronized(mSurface) {
int size = mPoints.getSize();
for(int i = 0; i < size; i += 2) {
c.drawCircle(mPoints.get(i), mPoints.get(i + 1), 3, mPaint);
}
}
}
finally {
if (c != null)
mSurface.unlockCanvasAndPost(c);
}
}
}
ただし、float配列をクリアし、新しいタッチポイントのみを描画するように更新すると、多くのちらつきが発生します。私が知る限り、これはAndroidがダブルバッファリングを使用しているためです。これらの問題を回避する方法がわかりません。