シグナルを表示するカスタム ビューを作成しています。onDraw() の時間を短縮するために、これまでに描画したすべてをビットマップにキャッシュし、すべての onDraw() 呼び出しでそれに追加するだけです。これを行うことで、すべてをやり直すのではなく、一度にいくつかのフィクセルを描画するだけでよいため、時間を大幅に節約できます。
ただし、気になる点があります-提供されたキャンバスに直接描画すると、最初にビットマップに描画してからキャンバスにビットマップを描画するよりも「正確な」描画が提供されるようです。次の写真の下部を見ると、違いがわかります。
https://github.com/gardah/android-uglybitmapdrawing/で不一致を表示するデモ プロジェクトをアップロードしましたが、関連するコードは次のとおりです。
@Override
public void onDraw(Canvas canvas) {
if(cachedBitmap == null) {
cachedBitmap = Bitmap.createBitmap(getWidth(), 200, Config.ARGB_8888);
cachedCanvas = new Canvas(cachedBitmap);
}
for(int i = 0; i < COORDS.length; i++) {
float[] curCoords = COORDS[i];
canvas.drawLine(curCoords[0], curCoords[1], curCoords[2], curCoords[3], linePaint);
cachedCanvas.drawLine(curCoords[0], curCoords[1], curCoords[2], curCoords[3], linePaint);
}
canvas.drawBitmap(cachedBitmap, 0, 120, null);
}
2 つのトレースが同じではないのはなぜですか? さらに重要なことに、下のトレースを上のトレースのように見せるにはどうすればよいですか?