web-dev-qa-db-fra.com

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?

43
saranya krishnan

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

Donner un sens au multitouch

Si vous souhaitez simplement implémenter le pincement au zoom, vous n’avez besoin que de quelques lignes de code:

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

La suite de l'article traite de la gestion d'autres gestes, mais plutôt que d'utiliser leur implémentation, vous pouvez utiliser GestureDetector tout comme ScaleGestureDetector est utilisé dans le code ci-dessus.

80
Alex S

Mettez votre vue à l'intérieur ZoomView.

La vue personnalisée disponible ici https://github.com/Polidea/Android-zoom-view c'est simple, gratuit et tellement amusant!

8
karooolek

Cette bibliothèque vous permet d'appliquer le zoom et le panoramique aux vues personnalisées. Cela a fonctionné pour mes besoins: 

https://github.com/natario1/ZoomLayout

0
jj.