Tirar a la animación del zumbido

Muchos de nosotros debemos haber encontrado aplicaciones como Tinder y Dripper donde puedes tirar hacia abajo en la vista que contiene una imagen y la imagen se amplía. Y luego, cuando la dejas ir, la imagen se aleja para volver a su estado de origen.

Tomemos un ejemplo de Tinder:

Estado original: y estado de acercamiento al tirar:

estado originalEstado ampliado

En iOS se hace por

- (void)viewDidLoad { [super viewDidLoad]; self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"church-welcome.png"]]; self.imageView.contentMode = UIViewContentModeScaleAspectFill; self.cachedImageViewSize = self.imageView.frame; [self.tableView addSubview:self.imageView]; [self.tableView sendSubviewToBack:self.imageView]; self.tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 170)]; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat y = -scrollView.contentOffset.y; if (y > 0) { self.imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width+y, self.cachedImageViewSize.size.height+y); self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y); } } 

Dado que mi experiencia en Objective C e iOS es muy limitada, no puedo implementarla en Android.

Esto es lo que creo que debería hacerse:

  • Coge el gesto desplegable
  • Aumentar la altura de la vista por la cantidad de tracción
  • Hacer una cierta clase de animación de la escala en la imagen para caberla en la visión ampliada

¿Alguien tiene alguna idea si hay alguna biblioteca que podría ser utilizada para este propósito?

Echa un vistazo a este proyecto:

https://github.com/Gnod/ParallaxListView

Si lo combina con la biblioteca ViewPagerIndicator, obtendrá el conjunto de características de la página de perfil de Tinder

https://github.com/JakeWharton/Android-ViewPagerIndicator

Creo que la forma más fácil es anular el método onTouchEvent de View.

Algo como esto:

 boolean inZoom = false; float prevY = 0; @Override public boolean onTouchEvent(MotionEvent event) { float eventY = event.getY(); float eventX = event.getX(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if(touchedTheImage(eventX, eventY)){ setZoomCenter(eventX, eventY); prevY = eventY; inZoom = true; return true; } break; case MotionEvent.ACTION_MOVE: if(inZoom){ changeZoomLevel(prevY, eventY); return true; } break; case MotionEvent.ACTION_UP: if(inZoom){ resetZoomLevel(); inZoom = false; return true; } break; } return false; } 

EDIT: para la parte de animación, considere esta publicación: https://stackoverflow.com/a/6650473/3568892

  • ¿Puede WebView de Android redimensionar automáticamente imágenes enormes?
  • Android: detener la reducción de la imagen
  • Android: Obtener miniatura de la imagen en la tarjeta SD, dado Uri de la imagen original
  • ¿Cómo distorsionar una imagen a cualquier cuadrángulo?
  • Compartir imagen con whatsapp en android
  • Android - botón con imagen - imagen oscura cuando el botón está deshabilitado
  • BitmapFactory.decodeStream devolver null cuando se establecen las opciones
  • Diferencia entre los formatos de imagen RGB888 y ARGB8888
  • Cómo almacenar la imagen como blob en Sqlite y cómo recuperarlo?
  • Cambiar el tamaño de la imagen del archivo
  • Copiar imagen al portapapeles en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.