2014-04-26 21 views
9

Molti di noi deve avere incontrato applicazioni come Tinder e Dripper dove si può tirare verso il basso la vista contenente un'immagine e l'immagine ingrandisce. E poi, quando si lascia andare, l'immagine zoom indietro per tornare al suo stato di origine.Tirare per Zoom Animazione

Prendiamo un esempio da Tinder:

Stato originale: e Zoomed-in stato quando ha tirato:

original statezoomed-in state

In iOS si è fatto da

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

} 

Poiché la mia esperienza in Objective C e iOS è molto limitata, non sono in grado di implementarlo in Android.

Ecco quello che penso dovrebbe essere fatto:

  • pescato del pull-down gesto
  • aumentare l'altezza della vista per l'importo di tiro
  • fare una sorta di animazione scala sul Immagine per adattarlo nella vista espansa

Qualcuno ha qualche idea se esiste una libreria che potrebbe essere utilizzata per questo scopo?

risposta

4

Partenza questo progetto:

https://github.com/Gnod/ParallaxListView

Se combinalo con th biblioteca e ViewPagerIndicator, è praticamente ottiene caratteristica Pagina profilo di Esca impostato

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

+0

Questo è esattamente quello che ho visto cercando! Non ero a conoscenza del fatto che si chiami Vista lista parallasse! Solo il nome mi ha aiutato a realizzare progetti fantastici! Grazie mille Adam! :) – Swayam

+0

È possibile applicare la stessa strategia per zoon in/out per WebView? – Sergii

+2

@Swayam sei riuscito a implementarlo come fa Tinder? Intendo combinarlo con ViewPager? –

2

Penso che il modo più semplice sia quello di sovrascrivere il metodo onTouchEvent di View.

Qualcosa di simile a questo:

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

EDIT: per la parte di animazione considerare questo post: https://stackoverflow.com/a/6650473/3568892

+0

Grazie per la risposta! Sono un po 'novizio nelle animazioni e negli eventi touch. Potresti gentilmente dare una risposta più elaborata? Voglio dire, cosa farebbero le funzioni di zoom() e cose del genere. Grazie ancora! – Swayam

+0

Si può giocare con il metodo setBounds() ... Vedi il post che ho fatto riferimento; invece di width/2 e height/2 useresti i valori impostati con "setZoomCenter" (non dimenticare di convertire in coordinate imageView) e "changeZoomLevel" imposta ovviamente quello che viene chiamato "zoomController" nell'altro post ... – bgoeschi

+0

Il link sembra davvero promettente! Dare una prova! Grazie! – Swayam