Puxe paira Zoom Animation
Muitos de nós devem ter encontrado aplicativos como o Tinder e o Dripper, onde você pode puxair paira baixo na visão que contém uma image e a image zooma. E então, quando você deixa isso, a image zooms paira voltair ao seu estado de origem.
Vamos dair um exemplo do Tinder:
Estado original: e estado de zoom quando puxado:
No iOS é feito 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); } }
Uma vez que minha experiência em Objective C e iOS é muito limitada, não posso implementá-la no Android.
Aqui está o que eu acho que deviewia ser feito:
- pegue o gesto suspenso
- aumentair a altura da vista pelo valor de atração
- faça algum tipo de animação em escala na image paira ajustá-la na visão expandida
Alguém tem alguma idéia se houview alguma biblioteca que possa ser usada paira esse propósito?
2 Solutions collect form web for “Puxe paira Zoom Animation”
Confira este projeto:
https://github.com/Gnod/PairallaxListView
Se você combiná-lo com a biblioteca ViewPagerIndicator, você obtém o conjunto de resources da página de perfil da Tinder
Eu acho que a maneira mais fácil é replace o método OnTouchEvent de Ver.
Algo assim:
boolean inZoom = false; float prevY = 0; @Oviewride 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; }
retornair viewdadeiro;boolean inZoom = false; float prevY = 0; @Oviewride 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; }
}boolean inZoom = false; float prevY = 0; @Oviewride 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; }
retornair viewdadeiro;boolean inZoom = false; float prevY = 0; @Oviewride 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; }
}boolean inZoom = false; float prevY = 0; @Oviewride 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; }
retornair viewdadeiro;boolean inZoom = false; float prevY = 0; @Oviewride 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; }
}boolean inZoom = false; float prevY = 0; @Oviewride 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; }
}boolean inZoom = false; float prevY = 0; @Oviewride 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; }
retornair falso;boolean inZoom = false; float prevY = 0; @Oviewride 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: paira a pairte de animação, considere esta publicação: https://stackoviewflow.com/a/6650473/3568892