Frage

Mein Layout enthält Schaltflächen, Textansichten usw. Ist es möglich, in meinem Layout einen Pinch -Zoom zu implementieren?

War es hilfreich?

Lösung

** Antworte veraltet **

Schauen Sie sich die folgenden Links an, die Ihnen helfen können

Die besten Beispiele finden Sie in den folgenden Links, die Sie neu umgeben können, um Ihre Anforderungen zu erfüllen.

  1. Implementierung des Pinch-Zoom-Constur

  2. Android-Pinch

  3. Gestortetector.ImpleonGonTurelistener

Andere Tipps

Für Android 2.2+ (API -Stufe8) können Sie skaliertesTector verwenden.

Sie brauchen ein Mitglied:

private ScaleGestureDetector mScaleDetector;

In Ihrem Konstruktor (oder OnCreate ()) fügen Sie hinzu:

mScaleDetector = new ScaleGestureDetector(context, new OnScaleGestureListener() {
    @Override
    public void onScaleEnd(ScaleGestureDetector detector) {
    }
    @Override
    public boolean onScaleBegin(ScaleGestureDetector detector) {
        return true;
    }
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        Log.d(LOG_KEY, "zoom ongoing, scale: " + detector.getScaleFactor());
        return false;
    }
});

Sie überschreiben onTouchEvent:

@Override
public boolean onTouchEvent(MotionEvent event) {
    mScaleDetector.onTouchEvent(event);
    return true;
}

Wenn Sie Ihre Ansicht von Hand zeichnen, speichern Sie in einem Mitglied wahrscheinlich den Skalierungsfaktor in einem Mitglied. Rufen Sie dann ungültig () an und verwenden Sie den Skalierungsfaktor beim Zeichnen Ihres ONDRAW (). Andernfalls können Sie die Schriftgrößen oder solche Dinge im OnScale () direkt ändern.

Ich habe einen Prise Zoom für meine implementiert TextView, verwenden Dies Lernprogramm. Der resultierende Code ist Folgendes:

private GestureDetector gestureDetector;
private View.OnTouchListener gestureListener;

und in Oncreate ():

    // Zoom handlers
    gestureDetector = new GestureDetector(new MyGestureDetector());
    gestureListener = new View.OnTouchListener() {

        // We can be in one of these 2 states
        static final int NONE = 0;
        static final int ZOOM = 1;
        int mode = NONE;

        static final int MIN_FONT_SIZE = 10;
        static final int MAX_FONT_SIZE = 50;

        float oldDist = 1f;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            TextView textView = (TextView) findViewById(R.id.text);

            switch (event.getAction() & MotionEvent.ACTION_MASK) {
                case MotionEvent.ACTION_POINTER_DOWN:
                    oldDist = spacing(event);
                    Log.d(TAG, "oldDist=" + oldDist);
                    if (oldDist > 10f) {
                       mode = ZOOM;
                       Log.d(TAG, "mode=ZOOM" );
                    }
                    break;
                case MotionEvent.ACTION_POINTER_UP:
                    mode = NONE;
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (mode == ZOOM) {
                        float newDist = spacing(event);
                        // If you want to tweak font scaling, this is the place to go.
                        if (newDist > 10f) {
                            float scale = newDist / oldDist;

                            if (scale > 1) {
                                scale = 1.1f;
                            } else if (scale < 1) {
                                scale = 0.95f;
                            }

                            float currentSize = textView.getTextSize() * scale;
                            if ((currentSize < MAX_FONT_SIZE && currentSize > MIN_FONT_SIZE)
                                    ||(currentSize >= MAX_FONT_SIZE && scale < 1)
                                    || (currentSize <= MIN_FONT_SIZE && scale > 1)) {
                                textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, currentSize);
                            }
                        }
                    }
                    break;
                }
            return false;
        }

Magische Konstanten 1.1 und 0,95 wurden empirisch ausgewählt (mit Verwendung scale Variable für diesen Zweck machte meine TextView sich irgendwie komisch benehmen).

Es gibt auch dieses Projekt, das den Job erledigt und perfekt für mich funktioniert hat:https://github.com/chrisbanes/photoview

In der API -Stufe 11 in Honeycomb können wir SetScalax und SetScaley mit Pivot Point verwenden
Ich habe es hier erklärt
Eine Aussicht vollständig vergrößern
Prise Zoom, um vollständig anzusehen

Ich habe ein Projekt für Basic-Pinch-Zoom erstellt, das Android 2.1+ unterstützt

Verfügbar hier

Ich habe eine Open -Source -Bibliothek, die dies sehr gut macht. Es handelt sich um eine vier Gestenbibliothek, die mit einer außergewöhnlichen Pan-Zoom-Einstellung ausgestattet ist. Sie können es hier finden: https://bitbucket.org/warwick/hacergestov3Oder Sie können die Demo -App hier herunterladen: https://play.google.com/store/apps/details?id=com.warwickwestonwright.hacergestov3demoDies ist eine reine Leinwandbibliothek, sodass sie in hübschem Szenario verwendet werden kann. Hoffe das hilft.

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