Frage

Ich habe schon einige Stunden gesucht und nicht in der Lage einen kurzen bestimmten andswer auf meine Frage zu finden. Ich habe eine Anwendung, wo ich einen Sportplatz zu ziehen (einschließlich aller Wälzlinien) auf dem Bildschirm. Bisher habe ich die Surface erweitert und so ziemlich den Rest der LunarLander Demo ebenfalls kopiert. Alle Daten, die Anwendung erfordert die Tonhöhe auf die richtigen Abmessungen zu ziehen werden von einer Fassung aufgenommen, die auch in Ordnung arbeitet. Doch in der Minute in der OnDraw () Funktion, Ich zeichne alle Zeilen jeden Rahmen, der eine ziemlich langsame Framerate im Emulator verursacht (z ~ 10fps). Hier ist meine OnDraw () Funktion:

@Override
public void onDraw(Canvas canvas) {
canvas.drawARGB(255,0,144,0);
canvas.drawLine(canvas, getFirstLine(), mPaint);
canvas.drawRect(canvas, getFirstRect(), mPaint);
canvas.drawRect(canvas, getSecondRect(), mPaint);
...
canvas.drawRect(canvas, getSecondRect(), mPaint);
drawAnimatedObjects();
}

Ich ziehe dann Kreise und unterschiedliche Positionen über diesen Hintergrund. Meine Frage ist, wie kann ich diese effizienter? Gibt es eine Möglichkeit, dass ich die Linien bei der Anwendung der Initialisierung ziehen kann und nicht haben sie jeden Rahmen neu zu zeichnen?

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Sie sollten auf jeden Fall jede Leinwand Zeichnung werden das Caching, die bei der Initialisierung in eine Bitmap ändern und ziehen dann nicht, dass die Bitmap in OnDraw (). Das wird helfen, mal viel zu machen. So etwas wie:

Bitmap mField = null;

void init()
{
  mField = new Bitmap(...dimensions...);
  Canvas c = new Canvas(mField);
  c.drawRect(...);
  ...
}

void onDraw(Canvas c)
{
  c.drawBitmap(mField);
}

Andere Tipps

Ist Ihre statische Sportplatz oder tut, ist blättern über den Bildschirm? Wenn es statisch ist, sollten Sie es einmal zu bauen und sie als Bild speichern, die als neu gezeichnet jedes Mal sein wird. Eine andere Sache: Der Emulator ist sehr langsam im Vergleich zu modernen Geräten. Sie sollten Ihre Leistung mindestens auf einem G1 überprüfen oder später die tatsächliche Leistung zu überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top