J'ai créé ma vue personnalisée et je souhaite appliquer un zoom par pincement à ma vue personnalisée. Comment faire ça?
Cet article sur le blog des développeurs Android couvre très bien ce sujet (faites défiler jusqu'à la section sur GestureDetectors):
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.
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!
Cette bibliothèque vous permet d'appliquer le zoom et le panoramique aux vues personnalisées. Cela a fonctionné pour mes besoins: