2014-04-26 94 views
9

我们很多人肯定会遇到应用程序,如TinderDripper在那里你可以拉下视图包含图像和图像变焦放大。然后当你让它去,图像缩小回到原来的状态。拉来缩放动画

让我们从火种的例子:

原始状态:拉缩小时的状态:

original statezoomed-in state

的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中实现它。

以下是我认为应该做的事:

  • 抓下拉手势
  • 增加视图通过牵拉量
  • 高度做一些规模动画上的图像以适应它在扩大视图

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

回答

4

看看这个项目:

https://github.com/Gnod/ParallaxListView

如果您把它和th结合起来ËViewPagerIndicator库,你很可能得到火种的个人主页页面的功能设置

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

+0

这正是我所看到的!我不知道它被称为视差列表视图!只是名字帮助我得到了一些很棒的项目!非常感谢亚当! :) – Swayam

+0

是否有可能应用相同的策略为zoon进/出WebView? – Sergii

+2

@Swayam你能像Tinder那样实现这个吗?我的意思是结合它与ViewPager? –

2

我认为最简单的方法是覆盖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; 
} 

编辑: 为动画部件考虑这个帖子: https://stackoverflow.com/a/6650473/3568892

+0

感谢您的回答!我在动画和触摸事件上有点新手。你能否给出一个更详尽的答案?我的意思是,zoom()函数会做些什么以及类似的东西。再次感谢! – Swayam

+0

您可以使用setBounds()方法来玩耍......请参阅我引用的帖子;而不是宽度/ 2和高度/ 2,您可以使用“setZoomCenter”设置的值(不要忘记转换为imageView坐标),“changeZoomLevel”显然会在另一个帖子中设置所谓的“zoomController”... – bgoeschi

+0

该链接看起来很有希望!试一试!谢谢! – Swayam