2013-10-03 11 views
9

Mam ViewPager, w którym każdy z jego widoków reprezentuje kartę na talii. Każda karta ma cień na ramce przy użyciu marginesu ViewPager:Margines ViewPager w transformacji PageTransformer

cardsViewPager.setPageMargin(getResources().getDisplayMetrics().widthPixels/20); 
cardsViewPager.setPageMarginDrawable(R.drawable.shadow); 

Działa zgodnie z oczekiwaniami.

Ale, jeśli mogę dodać PageTransformer tak, że karty po prawej stronie stos na górze kart po lewej stronie:

public class ScalePageTransformer implements PageTransformer { 
    private final ViewPager mViewPager; 

    public ScalePageTransformer(ViewPager viewPager) { 
     this.mViewPager = viewPager; 
    } 

    @Override 
    public void transformPage(View page, float position) { 
     if (position <= 0) { 
      int pageWidth = mViewPager.getWidth(); 
      final float translateValue = position * -pageWidth; 
      if (translateValue > -pageWidth) { 
       page.setTranslationX(translateValue); 
      } else { 
       page.setTranslationX(0); 
      } 
     } 
    } 
} 

zrobić to poprzez:

cardsViewPager.setPageTransformer(false, new ScalePageTransformer(cardsViewPager)); 

Ale teraz , margines nie pojawia się. Gdybym miał efekt pomniejszenia w PageTransformer, mogę zobaczyć, kiedy aktualna karta jest zmniejszana, że ​​margines pobierany jest poniżej aktualnej karty na ekranie. Oto pic, aby opisać to, co się dzieje:

Image

Niebieska karta jest swiped od prawej do lewej na górze czerwoną kartkę. Ponieważ czerwona kartka ma transformację skali, widzimy margines do rysowania w kolorze czarnym za nim.

Czy istnieje sposób na to, aby wyciągnąć margines znajdujący się na czerwonej karcie? Czy nie powinno to być zachowanie domyślne?

Odpowiedz

-3

Spróbuj użyć tego kodu na etapie transformacji swoich przeglądanie stron:

private static final float MIN_SCALE = 0.85f; 
private static final float MIN_ALPHA = 0.5f; 

public void transformPage(View view, float position) { 
    int pageWidth = view.getWidth(); 
    int pageHeight = view.getHeight(); 

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

    } else if (position <= 1) { // [-1,1] 
     // Modify the default slide transition to shrink the page as well 
     float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
     float vertMargin = pageHeight * (1 - scaleFactor)/2; 
     float horzMargin = pageWidth * (1 - scaleFactor)/2; 
     if (position < 0) { 
      view.setTranslationX(horzMargin - vertMargin/2); 
     } else { 
      view.setTranslationX(-horzMargin + vertMargin/2); 
     } 

     // Scale the page down (between MIN_SCALE and 1) 
     view.setScaleX(scaleFactor); 
     view.setScaleY(scaleFactor); 

     // Fade the page relative to its size. 
     view.setAlpha(MIN_ALPHA + 
       (scaleFactor - MIN_SCALE)/
       (1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

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

Hope this helps ...

+4

skopiuj wklej z witryny dla programistów Androida nikomu nie pomoże. spróbuj zrozumieć problem, a następnie dodaj komentarz. – George

0

Zmiana

cardsViewPager.setPageTransformer(true, new ScalePageTransformer(cardsViewPager)); 

pierwszy argument jest kolejność rysowania