Android MotionEvent ACTION_MOVE Effizienz. Wie man die Leistung verbessern?

Derzeit arbeite ich an einer app, die ermöglicht freie Zeichnung.

Die aktuelle Methode, die ich verwende, ist wie folgt:

currentLine ist eine Liste, die speichert einen Verlauf aller Punkte, die ACTION_MOVE gibt.

public boolean onTouchEvent (MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                Point p = new Point(event.getX(),event.getY());
                currentLine.addPoint(p);
                    invalidate();
                break;
        }

        return true;

}

Ich dann diese Punkte, und zeichnen Sie diese in die onDraw Methode meiner Klasse.

@Override
protected void onDraw(Canvas c) {
    super.onDraw(c);

    //Draw Background Color
    c.drawColor(Color.BLUE);

    //Setup Paint
    Paint p = new Paint();
    p.setStyle(Style.FILL);
    p.setColor(COLOR.WHITE);

    //iterate through points
    if(currentLine.size()>0){
        for(int x = 0;x<currentLine.size();x++){
            c.drawCircle(currentLine.get(x).getX(), currentLine.get(x).getY(), 3, p);
        }
    }

}

Und diese Methode funktioniert Super, ohne lags oder irgendwas.

Außer, dass es nicht genug der Punkte, die es braucht, um.

Zum Beispiel, wenn ich ziehen Sie meine finger, die schnell über den gesamten Bildschirm, kann es nur Unentschieden 15 Punkte der gesamten Veranstaltung.

Wie verbessere ich die Leistung/Geschwindigkeit des MotionEvent? Wie bekomme ich mehr Punkte? Oder ist es etwas anderes was ich tun sollte?

- - - - - EDIT - - - - -

Habe ich es geschafft, zu lösen, es selbst.

Anstatt drawCircle wechselte ich zu drawLine.

Beispiel:

if(points.size()>0){
        for(int x = 0;x<points.size()-1;x++){
            c.drawLine(points.get(x).getX(), points.get(x).getY(), points.get(x+1).getX(), points.get(x+1).getY(), p);
        }
}

Diese produziert durchgezogene Linien, das ist, was ich wollte.

Jedoch, für die um des Wissens Willen, ich würde noch gerne wissen, wie die Geschwindigkeit MotionEvents.

Eine ausführliche Antwort wäre sehr hilfreich

  • Ich fand, dass wenn ich gehalten "Zeichnung" nach einer kurzen Weile, die Anzahl der Veranstaltungen drastisch erhöht. Es war fast, als ob Android aufgefallen, dass diese app tut, was es macht und mehr Mittel, um es. Ich bin sehr gespannt, ob jemand bietet eine hilfreiche Antwort hier.
  • Ich habe aktualisiert mein thread mit einem möglichen Arbeit-rund, vielleicht kann es dir helfen.
  • Nein, Nein, ich war mit durchgezogenen Linien als gut, aber ich hoffe, dass jemand berichtet, einen Weg zu zwingen, schneller sogar feuern.
  • Ja, das wäre wirklich dabei geholfen, mich als gut.
  • Verwenden Sie eine Erweiterung von einer SurfaceView, oder eine normale Ansicht?
  • Eine normale Ansicht, aber das ist austauschbar, wenn erforderlich.
  • Wenn Sie bewegen würde, Ihre Zeichnung auf einen anderen thread (mit surfaceview ist ein guter Weg, dies zu tun), es wäre nicht in der Lage zu blockieren, die motionevents, die in der Lage wäre, um das Feuer mehr oft. Andernfalls müssen Sie warten, bis die Zeichnung zu vervollständigen, bevor man eine neue Bewegung. (Sorry für die späte Antwort, ich habe nicht erhalten eine Benachrichtigung, dass Sie geantwortet hatte auf meine Frage)

InformationsquelleAutor MrZander | 2011-12-13
Schreibe einen Kommentar