¿Cómo puedo acercar y alejar una aplicación en Android Studio?

Cree un archivo de diseño que contenga la versión pequeña y grande del contenido que desea ampliar. El siguiente ejemplo crea un ImageButton para la miniatura de la imagen en la que se puede hacer clic y un ImageView que muestra la vista ampliada de la imagen:

        

Configurar la animación de zoom

Una vez que aplique su diseño, configure los controladores de eventos que activan la animación de zoom. El siguiente ejemplo agrega un View.OnClickListener al ImageButton para ejecutar la animación de zoom cuando el usuario hace clic en el botón de imagen:

  public class ZoomActivity extiende FragmentActivity {// Mantenga una referencia al animador actual, // para que pueda cancelarse a mitad de camino.  animador privado mCurrentAnimator;  // La duración del tiempo de animación "breve" del sistema, en milisegundos.  Esta // duración es ideal para animaciones sutiles o animaciones que ocurren // con mucha frecuencia.  private int mShortAnimationDuration;  @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState);  setContentView (R.layout.activity_zoom);  // Conecte los clics en las vistas en miniatura.  Vista final thumb1View = findViewById (R.id.thumb_button_1);  thumb1View.setOnClickListener (nueva View.OnClickListener () {@Override public void onClick (Ver vista) {zoomImageFromThumb (thumb1View, R.drawable.image1);}});  // Recupere y guarde en caché el tiempo de animación "corto" predeterminado del sistema.  mShortAnimationDuration = getResources (). getInteger (android.R.integer.config_shortAnimTime);  } ...}

Ampliar la vista


Ahora deberá animar desde la vista de tamaño normal a la vista ampliada cuando sea apropiado. En general, debe animar desde los límites de la vista de tamaño normal hasta los límites de la vista de mayor tamaño. El siguiente método muestra cómo implementar una animación de zoom que hace zoom desde una miniatura de imagen a una vista ampliada haciendo lo siguiente:

  1. Asigne la imagen de alta resolución a la vista de imagen oculta “ampliada” (ampliada). El siguiente ejemplo carga un recurso de imagen grande en el subproceso de la interfaz de usuario para simplificar. Deberá hacer esto cargando en un hilo separado para evitar el bloqueo en el hilo de la interfaz de usuario y luego establecer el mapa de bits en el hilo de la interfaz de usuario. Idealmente, el mapa de bits no debe ser más grande que el tamaño de la pantalla.
  2. Calcule los límites inicial y final para ImageView.
  3. Anime cada una de las cuatro propiedades de posicionamiento y dimensionamiento X, Y, (SCALE_X y SCALE_Y) simultáneamente, desde los límites iniciales hasta los límites finales. Estas cuatro animaciones se agregan a un AnimatorSet para que puedan iniciarse al mismo tiempo.
  4. Aleje la imagen ejecutando una animación similar pero a la inversa cuando el usuario toca la pantalla cuando la imagen está ampliada. Puede hacerlo agregando un View.OnClickListener a ImageView. Cuando se hace clic, ImageView minimiza el tamaño de la miniatura de la imagen y establece su visibilidad en GONE para ocultarlo.
  private void zoomImageFromThumb (vista final thumbView, int imageResId) {// Si hay una animación en progreso, cancélela // inmediatamente y continúe con esta.  if (mCurrentAnimator! = null) {mCurrentAnimator.cancel ();  } // Cargue la imagen de alta resolución "ampliada".  Final ImageView ExtendedImageView = (ImageView) findViewById (R.id.expanded_image);  expandImageView.setImageResource (imageResId);  // Calcule los límites inicial y final de la imagen ampliada.  // Este paso implica muchas matemáticas.  Yay, matemáticas.  Rect final startBounds = new Rect ();  final Rect finalBounds = nuevo Rect ();  Punto final globalOffset = nuevo Punto ();  // Los límites iniciales son el rectángulo visible global de la miniatura, // y los límites finales son el rectángulo visible global del contenedor // vista.  Establezca también el desplazamiento de la vista del contenedor como el origen de los // límites, ya que ese es el origen de las // propiedades de animación de posicionamiento (X, Y).  thumbView.getGlobalVisibleRect (startBounds);  findViewById (R.id.container) .getGlobalVisibleRect (finalBounds, globalOffset);  startBounds.offset (-globalOffset.x, -globalOffset.y);  finalBounds.offset (-globalOffset.x, -globalOffset.y);  // Ajuste los límites iniciales para que tengan la misma relación de aspecto que los // límites finales utilizando la técnica de "recorte central".  Esto evita el // estiramiento no deseado durante la animación.  También calcule el factor de escala inicial // (el factor de escala final es siempre 1.0).  float startScale;  if ((float) finalBounds.width () / finalBounds.height ()> (float) startBounds.width () / startBounds.height ()) {// Extiende los límites de inicio horizontalmente startScale = (float) startBounds.height () / finalBounds.height ();  float startWidth = startScale * finalBounds.width ();  flotante deltaWidth = (startWidth - startBounds.width ()) / 2;  startBounds.left - = deltaWidth;  startBounds.right + = deltaWidth;  } else {// Extiende los límites de inicio verticalmente startScale = (float) startBounds.width () / finalBounds.width ();  float startHeight = startScale * finalBounds.height ();  flotante deltaHeight = (startHeight - startBounds.height ()) / 2;  startBounds.top - = deltaHeight;  startBounds.bottom + = deltaHeight;  } // Ocultar la miniatura y mostrar la vista ampliada.  Cuando comienza la animación //, colocará la vista ampliada en el lugar de la // miniatura.  thumbView.setAlpha (0f);  extendedImageView.setVisibility (View.VISIBLE);  // Establezca el punto de pivote para las transformaciones SCALE_X y SCALE_Y // en la esquina superior izquierda de la vista ampliada (el valor predeterminado // es el centro de la vista).  expandImageView.setPivotX (0f);  extendedImageView.setPivotY (0f);  // Construye y ejecuta la animación paralela de las cuatro propiedades de traducción y // escala (X, Y, SCALE_X y SCALE_Y).  AnimatorSet set = new AnimatorSet ();  set .play (ObjectAnimator.ofFloat (extendedImageView, View.X, startBounds.left, finalBounds.left)) .with (ObjectAnimator.ofFloat (extendedImageView, View.Y, startBounds.top, finalBounds.top)) .with (ObjectAnimator. ofFloat (extendedImageView, View.SCALE_X, startScale, 1f)). with (ObjectAnimator.ofFloat (extendedImageView, View.SCALE_Y, startScale, 1f));  set.setDuration (mShortAnimationDuration);  set.setInterpolator (nuevo DecelerateInterpolator ());  set.addListener (new AnimatorListenerAdapter () {@Override public void onAnimationEnd (Animator animation) {mCurrentAnimator = null;} @Override public void onAnimationCancel (Animator animation) {mCurrentAnimator = null;}});  seleccione arranque();  mCurrentAnimator = set;  // Al hacer clic en la imagen ampliada, debería reducirla // a los límites originales y mostrar la miniatura en lugar de // la imagen expandida.  flotante final startScaleFinal = startScale;  extendedImageView.setOnClickListener (new View.OnClickListener () {@Override public void onClick (View view) {if (mCurrentAnimator! = null) {mCurrentAnimator.cancel ();} // Animar las cuatro propiedades de posicionamiento / dimensionamiento en paralelo, // volver a sus valores originales. AnimatorSet set = new AnimatorSet (); set.play (ObjectAnimator .ofFloat (extendedImageView, View.X, startBounds.left)) .with (ObjectAnimator .ofFloat (extendedImageView, View.Y, startBounds.top) ) .with (ObjectAnimator .ofFloat (extendedImageView, View.SCALE_X, startScaleFinal)) .with (ObjectAnimator .ofFloat (extendedImageView, View.SCALE_Y, startScaleFinal)); set.setDuration (mShortAnimationDuration); set.setInterpolator (new Decelerate) ; set.addListener (new AnimatorListenerAdapter () {@Override public void onAnimationEnd (Animator animation) {thumbView.setAlpha (1f); expandeImageViewView.setVisibility (View.GONE); mCurrentAnimator = null;} @Override public void onAnimator animation (Cancelar) {thumbView.setAlpha (1f);  extendedImageView.setVisibility (View.GONE);  mCurrentAnimator = nulo;  }});  seleccione arranque();  mCurrentAnimator = set;  }});}

Espero que esto ayude.

Para el desarrollo de aplicaciones móviles, visite Grepix Infotech – Compañía de desarrollo de aplicaciones móviles o envíe un correo electrónico a [correo electrónico protegido]

usa animación a escala.

  1. crear un nuevo directorio dentro de res como “anim”
  2. crear un nuevo nombre de archivo de animación como zoom_in.xml dentro de la carpeta anim
  3. dentro de escriba el siguiente código
  

 																		

y dentro del archivo .java use el siguiente código

  animation = AnimationUtils.loadAnimation (esto, R.anim.zoom_in);
 image.setAnimation (animación)