2 Stimmen

Was ist der Zweck dieser Funktion in Android 2D-Grafiken (entnommen aus der FingerPaint-App in apidemos)?

Ich habe versucht, die Fingerfarbanwendung in Api-Demos auf Android zu verstehen. Es handelt sich um eine Skizzier-App. Hier ist der Kern der App.

@Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                touch_start(x, y);
                invalidate();
                break;
            case MotionEvent.ACTION_MOVE:
                touch_move(x, y);
                invalidate();
                break;
            case MotionEvent.ACTION_UP:
                touch_up();
                invalidate();
                break;
        }
        return true;
    }
}
 //Wird aufgerufen, wenn Sie Ihren Finger auf den Bildschirm legen.
 private void touch_start(float x, float y) {
            mPath.reset();
            mPath.moveTo(x, y);
            mX = x;
            mY = y;
        } 

   //Wird aufgerufen, wenn Sie Ihren Finger über den Bildschirm bewegen
  private void touch_move(float x, float y) {
        float dx = Math.abs(x - mX);
        float dy = Math.abs(y - mY);
        if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
            mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
            mX = x;
            mY = y;
        }
    }    

//Wird aufgerufen, wenn Sie Ihren Finger anheben
private void touch_up() {
        mPath.lineTo(mX, mY);
        // Pfad in unseren Offscreen zeichnen
        mCanvas.drawPath(mPath, mPaint);
        // Resetti den Pfad, damit nicht doppelt gezeichnet wird
        mPath.reset();
    }

Meine Frage bezieht sich auf die Funktion void touch_move(float x, float y). Die Funktion wird aufgerufen, wenn Sie Ihren Finger über den Bildschirm bewegen. Kann mir jemand sagen, warum die Funktion mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2) aufgerufen wird und was hinter der Verwendung von (x+mX)/2, (y+mY)/2 steckt? Es wäre großartig, wenn mir jemand erklären könnte, was hier passiert.

P.S: Ich habe bereits die Entwicklerseite besucht und gegoogelt, also bitte keine Links posten, die sich auf die Entwicklerseite beziehen

0voto

J. Taylor Punkte 3980

Für eine Erklärung von quadTo(), das für das Zeichnen von Bézierkurven verwendet wird, siehe: http://developer.android.com/reference/android/graphics/Path.html#quadTo%28float,%20float,%20float,%20float%29 ...

Was (x+mX)/2, (y+mY)/2 betrifft, sieht es für mich sehr ähnlich aus wie die lineare Mittelpunktformel, aber ich bin mir nicht sicher, wie sie hier verwendet wird ... es scheint, dass es damit zusammenhängen könnte, den Punkt zu finden, der auf der Mitte der Linie zwischen den Punkten (x,y) und (mX, mY) liegt

Sieht so aus, als ob Sie auch ein wenig über das Konstruieren von Bézierkurven lesen müssen, wenn Sie verstehen wollen, was hier passiert.

0voto

Will Hartung Punkte 110997

Sieht so aus, als ob es eine Kurve vom Startpunkt zum nächsten Punkt hinzufügt.

Siehe hier.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X