Android 拉动缩放动画

Android 拉动缩放动画,android,imageview,zooming,Android,Imageview,Zooming,我们中的许多人一定遇到过像和这样的应用程序,在这些应用程序中,您可以下拉包含图像的视图并放大图像。然后,当你放开它时,图像会缩小回到原始状态 让我们以Tinder为例: 原始状态:和拉入时放大的状态: 在iOS中由 - (void)viewDidLoad { [super viewDidLoad]; self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"church-welcome.

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

让我们以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中实现它

以下是我认为应该做的:

  • 抓住下拉手势
  • 将视图的高度增加拉伸量
  • 对图像执行某种缩放动画,使其适合展开的视图

有人知道是否有任何库可用于此目的吗?

我认为最简单的方法是重写视图的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;
}
编辑: 对于动画部分考虑这篇文章:

查看此项目:

如果将它与ViewPagerIndicator库结合使用,您几乎可以获得Tinder的profile page功能集


谢谢你的回答!我是一个动画和触摸事件的新手。你能给我一个更详细的回答吗?我的意思是,zoom()函数会做什么之类的事情。再次感谢!您可以使用setBounds()方法进行操作。。。见我引用的帖子;您可以使用“setZoomCenter”(不要忘记转换为imageView坐标)和“changeZoomLevel”设置的值,而不是宽度/2和高度/2。显然,在另一篇文章中设置了所谓的“zoomController”…链接看起来非常有希望!试试看!谢谢这正是我所看到的!我不知道这叫做视差列表视图!仅仅是名字就帮我得到了一些很棒的项目!非常感谢亚当!:)是否可以对WebView应用相同的放大/缩小策略?@Swayam您是否能够像Tinder一样实现这一点?我是说把它和ViewPager结合起来?是的,我是。我不确定我是否还有代码,但是是的,使用视差ListView是一个不错的选择。