拉到放大animation

我们中的许多人一定遇到过像TinderDripper这样的应用程序,在这些应用程序中,您可以在包含图像的视图上拉下图像,然后放大图像。然后当放开图像时,图像会缩小以回到原始状态。

我们以Tinder为例:

原始状态: 拉入时放大状态:

原始状态放大状态

iOS中完成

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

由于我在Objective C和iOS方面的专业知识非常有限,所以我无法在Android中实现它。

这是我认为应该做的事情:

  • 抓住下拉手势
  • 通过拉量来增加视图的高度
  • 在图像上进行某种缩放animation以适应扩展视图

有没有人有任何想法,如果有任何图书馆可以用于这个目的?

  • 将图像定位在ImageView中,并设置最大高度和最大宽度
  • ImageView ScaleType忽略填充
  • 如何在android中完整的圆形图像视图
  • 如何将视图放在ImageView的顶部,与ImageView的内容大小相关?
  • android:从图库中选择图像然后裁剪并在imageview中显示
  • Android - 从计时器线程更新位图
  • ImageView圆角
  • Android - ImageView bottomCrop而不是centerCrop
  • 看看这个项目:

    https://github.com/Gnod/ParallaxListView

    如果将它与ViewPagerIndicator库结合使用,几乎可以获得Tinder的configuration文件页面function集

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

    我认为最简单的方法是覆盖View的onTouchEvent方法。

    像这样的东西:

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

    编辑:对于animation部分考虑这个职位: https : //stackoverflow.com/a/6650473/3568892