2013-06-05 4 views
8

Attualmente sto lavorando sull'animazione personalizzata tra le pagine di passaggio in ViewPager. Quando faccio scorrere verso sinistra, View si sta spostando a sinistra e da sotto la nuova vista sta arrivando in primo piano. Vorrei rendere la vista, che si sposta a sinistra (che io dispongo) a ridursi, come sulle immagini folowing:Sfida: Animazione personalizzata di ViewPager. Modificare l'altezza degli elementi scelti (Visualizza piega)

enter image description hereenter image description hereenter image description here

Al secondo e terza immagine non mi immagino nuovo Panorama venendo al fronte, ma penso che non fosse necessario. Hai idea di come posso modificare il codice?

Vorrei modificare l'altezza di TableLayout, RelativeLayout e FrameLayout e mantenere l'altezza di entrambe le TextView. Inoltre dovrei cambiare la posizione X dell'intera vista.

Non vedo l'ora delle risposte creative (codice). Qui sotto allego il mio codice per l'animazione.

import android.view.View; 
import android.widget.RelativeLayout; 
import android.annotation.SuppressLint; 
import android.support.v4.view.ViewPager.PageTransformer; 

public class DepthPageTransformer implements PageTransformer { 
    private static float MIN_SCALE = 0.75f; 

    @SuppressLint("NewApi") 
    public void transformPage(View view, float position) { 
     int pageWidth = view.getWidth(); 

     if (position < -1) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.setAlpha(0); 

     } else if (position <= 0) { // [-1,0] 
      // Use the default slide transition when moving to the left page 
      view.setTranslationX(0); 
      view.setScaleX(1); 
      view.setScaleY(1); 
      //float scaleFactor = (1 - Math.abs(position)); 

      //WHAT TO PUT HERE TO ARCHIVE MY GOAL?? 

      //This is how I can get particular layouts: 
      // RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.fragment_object_canvas_RelativeLayout1); 
      //relativeLayout.setScaleX(scaleFactor); 
      //relativeLayout.setScaleY(scaleFactor); 

     } else if (position <= 1) { // (0,1] 
      // Fade the page out. 
      view.setAlpha(1 - position); 

      // Counteract the default slide transition 
      view.setTranslationX(pageWidth * -position); 
      //view.setRotation(1 - (position*360)); 

      // Scale the page down (between MIN_SCALE and 1) 
      float scaleFactor = MIN_SCALE 
        + (1 - MIN_SCALE) * (1 - Math.abs(position)); 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 

UPDATE:

posso manipolare con un'altezza di vista intera (per ora non posso fare solo in questo) con il seguente codice:

LinearLayout relativeLayout = (LinearLayout) view.findViewById(R.id.fragment_object_canvas_linearLayout1); 
      relativeLayout.setLayoutParams(new FrameLayout.LayoutParams(relativeLayout.getWidth(), NEW_HEIGHT_HERE))); 

Tuttavia, io non sono sicuro di quello che dovrebbe Inserisco la variabile NEW_HEIGHT_HERE per farlo funzionare correttamente ...

risposta

5

provare a lavorare con una variabile di posizione variabile. ottenere l'altezza del layout e ...:

relativeLayout.setLayoutParams(....,position*height+height) 
+0

non riesco a farlo funzionare. Penso che dovrei cambiare: topMargin, bottomMargin del container principale e quindi height of container tra textViews. Sto aspettando il codice se qualcuno è in grado di risolverlo. – Marek

1

Lei sembra piuttosto insistente su persone che postano codice originale, ma perché reinventare la ruota? Questa libreria ha un sacco di fantastiche animazioni per un ViewPager, incluso uno molto simile a quello che sembra richiedere.

https://github.com/jfeinstein10/JazzyViewPager

JazzyViewPager - Un facile usare ViewPager che aggiunge una serie impressionante di animazioni strisciata personalizzati. Basta cambiare il tuo ViewPager a JazzyViewPagers e sei a posto!


public enum TransitionEffect { 
     Standard, 
     Tablet, 
     CubeIn, 
     CubeOut, 
     Flip, 
     Stack, 
     ZoomIn, 
     ZoomOut, 
     RotateUp, 
     RotateDown, 
     Accordion 
    } 

È possibile selezionare l'animazione chiamando

private JazzyViewPager mJazzy; 
/* ... */ 
mJazzy.setTransitionEffect(TransitionEffect.*); 
+0

Ho visto questa libreria prima, e ancora una volta devo dire che non c'è animazione che mi piacerebbe ottenere. Si noti che voglio lasciare entrambe le textview non interessate dall'animazione verticale. – Marek

Problemi correlati