2013-10-03 14 views
9

Ho un ViewPager in cui ognuna delle sue viste è una rappresentazione della carta su un mazzo. Ogni carta ha un ombra sul confine con il margine di ViewPager:Margine ViewPager nelle trasformazioni di PageTransformer

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

E funziona come previsto.

Ma, se posso aggiungere un PageTransformer in modo che le carte sulla destra si impilare le carte a sinistra:

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

Faccio questo:

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

Ma ora , il margine non appare. Se ho avuto un effetto di zoom out su PageTransformer, posso vedere quando la scheda corrente viene ridimensionata, che il margine drawable è sotto la scheda corrente sullo schermo. Ecco una foto per descrivere quello che sta succedendo:

Image

La carta blu è essere fregato da destra a sinistra in cima al cartellino rosso. Poiché il cartellino rosso ha una trasformazione di scala, possiamo vedere il margine disegnabile in nero dietro di esso.

C'è un modo per forzare il margine drawable sopra al cartellino rosso? Questo non dovrebbe essere il comportamento predefinito?

risposta

-3

Prova ad usare questo codice per la fase di trasformazione della vista Pagine:

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

Spero che questo aiuti ...

+4

copia incolla dal sito web di sviluppatori Android non aiuterà nessuno. prova a capire il problema quindi pubblica un commento. – George

0

Scelgo

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

primo argomento è l'ordine di disegno

Problemi correlati