2013-06-05 10 views
8

Obecnie pracuję nad niestandardową animacją między przełączaniem stron w ViewPager. Kiedy przesuwam się w lewo, widok przesuwa się w lewo, a od dołu nowy widok zbliża się do przodu. Chciałbym, aby na stanowisku, że porusza się w lewo (czyli ja) wyrzucać do kurczenia się jak na folowing obrazów:Wyzwanie: Niestandardowa animacja ViewPagera. Zmień wysokość wybranych elementów (View fold)

enter image description hereenter image description hereenter image description here

na drugim i trzecim obrazie nie nowy obrazek View dochodzimy do przodu, ale myślę, że nie było to konieczne. Czy masz pojęcie, w jaki sposób mogę zmodyfikować kod?

Chciałbym zmienić wysokość TableLayout, RelativeLayout i FrameLayout i zachować wysokość obu widoków TextView. Również musiałbym zmienić pozycję X całego widoku.

Czekam z niecierpliwością na Twoje kreatywne odpowiedzi (kod). Poniżej załączam mój kod do animacji.

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:

mogę manipulować z wysokości całego widoku (na razie mogę tylko tego) za pomocą następującego kodu:

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

Jednak nie jestem pewien, co powinno Wstawiam zmienną NEW_HEIGHT_HERE, aby działała poprawnie ...

Odpowiedz

5

spróbuj pracować ze zmienną pozycji. Get wysokość układu i ...:

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

Nie mogę tego dokonać. Myślę, że powinienem zmienić: topMargin, bottomMargin głównego kontenera, a następnie wysokość kontenera pomiędzy widokami textView. Czekam na kod, jeśli ktoś będzie w stanie go rozwiązać. – Marek

1

Wydaje się dość natarczywy na ludzi delegujących oryginalnego kodu, ale dlaczego wyważać otwartych drzwi? Ta biblioteka ma mnóstwo wspaniałych animacji dla ViewPagera, w tym bardzo podobną do tej, o którą się pytasz.

https://github.com/jfeinstein10/JazzyViewPager

JazzyViewPager - Łatwy w użyciu ViewPager który dodaje niesamowity zestaw niestandardowych przesuwając animacji. Po prostu zmień swoje ViewPagers na JazzyViewPagers i już możesz iść!


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

Można wybrać animację wywołując

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

Widziałem tę bibliotekę wcześniej i znowu muszę powiedzieć, że nie ma animacji, którą chciałbym osiągnąć. Proszę zauważyć, że chcę pozostawić oba widoki tekstowe niezmienione przez animację pionową. – Marek

Powiązane problemy