49 votes

Pincez le zoom pour une vue personnalisée

J'ai créé ma vue personnalisée et je souhaite appliquer un zoom par pincement à ma vue personnalisée. Comment faire ça?

92voto

Alex S Points 673

Cet article sur les Développeurs Android Blog couvre très bien ce sujet (faites défiler jusqu'à la section sur GestureDetectors):

Donner un Sens à Multitouch

Si vous voulez juste pour mettre en œuvre pinch-to-zoom, il y a seulement quelques lignes de code que vous aurez besoin de:

private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;

public MyCustomView(Context mContext){
    //...
    //Your view code
    //...
    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    // Let the ScaleGestureDetector inspect all events.
    mScaleDetector.onTouchEvent(ev);
    return true;
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.scale(mScaleFactor, mScaleFactor);
    //...
    //Your onDraw() code
    //...
    canvas.restore();
}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        mScaleFactor *= detector.getScaleFactor();

        // Don't let the object get too small or too large.
        mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

        invalidate();
        return true;
    }
}

Le reste de l'article est consacrée à la manipulation d'autres gestes, mais plutôt que d'utiliser leur mise en œuvre, vous pouvez utiliser GestureDetector comme ScaleGestureDetector est utilisé dans le code ci-dessus.

8voto

karooolek Points 181

Mettez votre vue à l'intérieur de ZoomView .

La vue personnalisée disponible ici http://code.google.com/p/android-zoom-view/ c'est simple, gratuit et tellement amusant!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X