pizca de zoom de android

Mi diseño contiene botones, textviews, etc. ¿Es posible implementar el zoom pellizco en mi diseño?

Mira los siguientes enlaces que pueden ayudarte

Los mejores ejemplos se proporcionan en los enlaces a continuación, que puede refactorizar para cumplir con sus requisitos.

  1. implement-the-pinch-zoom-gestur

  2. Android-pellizco

  3. GestureDetector.SimpleOnGestureListener

Para Android 2.2+ (api level8), puede usar ScaleGestureDetector.

necesitas un miembro:

private ScaleGestureDetector mScaleDetector; 

en tu constructor (o onCreate ()) agregas:

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

Usted anula en TouchEvent:

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

Si dibuja su Vista a mano, en onScale () probablemente almacene el factor de escala en un miembro, luego invoque invalidate () y use el factor de escala cuando dibuje en su onDraw (). De lo contrario, puede modificar directamente el tamaño de las fonts o cosas así en onScale ().

Implementé un zoom pellizco para mi TextView , usando este tutorial. El código resultante es este:

 private GestureDetector gestureDetector; private View.OnTouchListener gestureListener; 

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

Las constantes mágicas 1.1 y 0.95 fueron elegidas empíricamente (el uso de scale variable de scale para este propósito hizo que mi comportamiento con TextView extraño).

También hay este proyecto que hace el trabajo y funcionó perfectamente para mí: https://github.com/chrisbanes/PhotoView

En honeycomb, API nivel 11, es posible, podemos usar setScalaX y setScaleY con punto de pivote
Lo he explicado aquí
Zoom una vista completamente
Pellizque Zoom para ver completamente

Creé un proyecto de pellizco-zoom básico compatible con Android 2.1+

Disponible aquí

Tengo una biblioteca de código abierto que hace esto muy bien. Es una biblioteca de cuatro gestos que viene con una configuración de zoom panorámico lista para usar. Puede encontrarlo aquí: https://bitbucket.org/warwick/hacergestov3 O puede descargar la aplicación de demostración aquí: https://play.google.com/store/apps/details?id=com.WarwickWestonWright.HacerGestoV3Demo This es una biblioteca de canvas puro, por lo que puede usarse en cualquier escenario. Espero que esto ayude.