Question

Ma mise en page contient des boutons, textviews, etc. Est-il possible de mettre en œuvre un zoom de pincement dans ma mise en page?

Était-ce utile?

La solution

** Réponse Périmé **

Consultez les liens suivants qui peuvent vous aider

Les meilleurs exemples sont fournis ci-dessous dans les liens que vous pouvez refactoriser pour répondre à vos besoins.

  1. mise en œuvre de-la-pincement zoom-Gestur

  2. Android pincée

  3. GestureDetector.SimpleOnGestureListener

Autres conseils

Pour Android 2.2+ (api Level8), vous pouvez utiliser ScaleGestureDetector.

vous avez besoin d'un membre:

private ScaleGestureDetector mScaleDetector;

dans votre constructeur (ou onCreate ()) vous ajoutez:

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;
    }
});

Vous remplacez onTouchEvent:

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

Si vous dessinez votre vue à la main, dans le onScale () vous faites probablement stocker le facteur d'échelle dans un membre, puis appelez invalidate () et utiliser le facteur d'échelle lors de l'élaboration de votre onDraw (). Sinon, vous pouvez modifier directement la taille des polices ou des choses comme ça dans le onScale ().

Je mis en place un pincée de zoom pour mon TextView, en utilisant ce tutoriel. Le code résultant est la suivante:

private GestureDetector gestureDetector;
private View.OnTouchListener gestureListener;

et en 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;
        }

Magie constantes ont été choisies 1,1 et 0,95 empirique (en utilisant la variable de scale à cet effet fait mon TextView se comportent un peu bizarre).

Il y a aussi ce projet qui fait le travail et a parfaitement fonctionné pour moi: https://github.com/chrisbanes/PhotoView

En nid d'abeille, le niveau de l'API 11, il est possible, nous pouvons utiliser setScalaX et setScaleY au point pivot
Je l'ai expliqué ici
Zooming une vue complètement
Zoom Pincez pour afficher complètement

J'ai créé un projet de pincement zoom de base qui sous Android 2.1 + supports

J'ai une bibliothèque open source qui fait cela très bien. Il est une bibliothèque de quatre geste qui vient avec un hors-the-box réglage du zoom panoramique. Vous pouvez le trouver ici: https://bitbucket.org/warwick/hacergestov3 Ou vous pouvez télécharger l'application de démonstration ici: https: // jeu .google.com / magasin / apps / détails? id = com.WarwickWestonWright.HacerGestoV3Demo Ceci est une bibliothèque pure toile de sorte qu'il peut être utilisé dans pratiquement tous les scénarios. Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top