我们中的许多人必须遇到Tinder和 Dripper 等应用,您可以在其中下拉包含图片的视图并放大图片。然后当你放手,图像缩小以回到原点状态。
让我们以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中实现它。
以下是我认为应该做的事情:
有没有人知道是否有可用于此目的的库?
答案 0 :(得分:4)
查看这个项目:
https://github.com/Gnod/ParallaxListView
如果您将它与ViewPagerIndicator库结合使用,您几乎可以获得Tinder的个人资料页面功能集
答案 1 :(得分: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