0

Ich habe einen Stapel von Fragmenten in einem ViewPager, mit einem benutzerdefinierten PageTransformer wie folgt definiert.ViewPager.PageTransformer mit einem Schlagschatten

mPager.setPageTransformer(true, new ViewPager.PageTransformer() { 
    @Override 
    public void transformPage(View page, float position) { 
     page.setTranslationX(page.getWidth() * -position); 
    } 
}); 

Wie kann ich einen Schatten für das ausgehende Fragment zeichnen? Lange Geschichte kurz Ich bin wie im Play-Buch der Suche nach etwas, keine curl Effekte benötigt, nur der Schatten des Elements auf der Oberseite des Stapels, vorzugsweise API 18 konform

Danke

Antwort

0

Ich hatte Zweifel etwa setPageMargin, weil es nur funktioniert, wenn die eingehende Ansicht eine Alpha-Transparenz hat. Ich meine, so scheint es, dass der Rand eine falsche Höhe hat und es steht unter dem eingehenden Blick, aber vielleicht habe ich einen Kompromiss

enter image description here

Dies ist der Code in der Tätigkeit für den Rand und die benutzerdefinierten gefunden PageTransformer

int margin = getResources().getDisplayMetrics().widthPixels/15; 
    mPager = (ViewPager) findViewById(R.id.pager); 

    mPager.setPageMargin(margin); 
    mPager.setPageMarginDrawable(R.drawable.shadow); 
    mPager.setPageTransformer(true, new StackTransformer()); 

wo der drawable als

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" > 
     <gradient 
      android:angle="360" 
      android:endColor="#00000000" 
      android:startColor="#aa000000" 
      android:type="linear" /> 
    </shape> 

an den letzten definiert ist transformPage Verfahren des PageTransformers, wo ich mit der Position und Alpha spielte eine akzeptable Wirkung

@Override 
public void transformPage(View view, float position) { 
    int pageWidth = view.getWidth(); 
    if (position < -1) { 
     view.setAlpha(0); 
    } else if (position <= 0) { 
     view.setAlpha(1); 
     view.setTranslationX(0); 
    } else if (position <= 1) { 
     view.setAlpha(1-position/2); // divide by 2 is the trick 
     view.setTranslationX(pageWidth * -position); 
    } else { 
     view.setAlpha(0); 
    } 
} 

Der resultierende Effekt zu finden sind, was Sie oben in der gif zu sehen, aber ich bin sicher, dass da draußen, gibt es eine besseres Weg, um diesen Effekt zu erreichen

Verwandte Themen