Ich implementiere einen ViewPager, der die nächsten und vorherigen Elemente anzeigt und auch Seitenübergänge mit ViewPager.PageTransformer animiert. Es hat einen Zoom-Out- und einen Fade-Out-Effekt. Zum Anzeigen der nächsten und vorherigen Seite verwende ich Negative PageMargin, padding auf viewpager und clipToPadding als false. Dies ist, wie es wieCentered View Pager mit der nächsten und vorherigen Vorschau und Pagetransformer
sieht Welche ist das, was ich will. Das Problem besteht darin, dass PageTransform die linke Kante als Referenz verwendet, d. H. Es zeigt den maximalen Zoom, wenn das Bild die linke Kante berührt, und nicht, wenn es sich in der Mitte befindet. Um dies zu beheben, habe ich eine in der Code-Offset wie folgt
viewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(View page, float position) {
if (position < -1) {
page.setAlpha(0);
} else if (position <= 1) {
float scaleFactor = Math.max(0.7f, 1 - Math.abs(position - 0.14285715f));
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setAlpha(scaleFactor);
} else {
page.setAlpha(0);
}
}
});
ich den Positionswert protokolliert, wenn Bild in der Mitte und fand den Offset. Dieser Offset funktioniert jedoch nur auf xxhdpi-Geräten. Auf xxxhdpi ergibt sich der Wert 0.12068965f. Außerdem ändert sich der Offset, wenn ich die Auffüllung von ViewPager ändere. Auch die Vorschaugröße der nächsten und vorherigen Änderungen mit dpi.
Frage
Wie kann ich die Polsterung, Marge zu berechnen und insbesondere Offset konsistentes Verhalten in verschiedenen Pulverinhalatoren zu halten?
-Code
Hier ist mein Layout, wo ich das Hinzufügen bin viewpager und seine Polsterung
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="400dp"
android:clipToPadding="false"
android:paddingLeft="40dp"
android:paddingRight="40dp">
</android.support.v4.view.ViewPager>
<Button
android:id="@+id/swiper"
android:text="Animate"
android:layout_centerInParent="true"
android:layout_below="@id/viewPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
Hier wird die viewpager Initialisierung Code:
final ViewPager viewPager = ((ViewPager) findViewById(R.id.viewPager));
Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120, r.getDisplayMetrics());
viewPager.setPageMargin((int) (-1 * px));
viewPager.setOffscreenPageLimit(5);
Sie eine Lösung für dieses – Pallavi
@Pallavi ja bekommen hat. Es ist Monate her und ich habe mir keinen Kommentar hinterlassen. Also, während ich mich nicht erinnern kann, wie, fand ich den Offset zu paddingLeft/page.getMeasuredWidth() '. Den vollständigen Code des Transformators als Antwort eingeben. – gitter
Danke für den Code ..! – Pallavi