Dieses Ding macht mich verrückt.Anzeigen animiert mit CoordinatorLayout und AppBarLayout verrückt (manchmal)
ich waren in der Lage, dieses Verhalten zu bekommen (genau das, was ich will): http://i.imgur.com/PGhL22k.gif
Und das ist das Verhalten hat, ist, wenn ich sehr schnell nach unten scrollen: http://i.imgur.com/kk7icAc.gif und http://i.imgur.com/YNPNiA6.gif
Es tut mir leid, aber die GIFs sind größer als 2MB und ich kann sie hier nicht hochladen ...
Ich möchte die Paginierungsleiste am unteren Rand, um den gleichen Betrag der Symbolleiste zu verbergen. Wenn man langsam scrollt geht es sehr gut, aber beim schnellen Scrollen hat es ein merkwürdiges Verhalten, wie man an den oben genannten GIFs sehen kann.
Dies ist das Layout XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:kiosk="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/android_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
kiosk:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vpPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
kiosk:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<include
layout="@layout/paginator_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
kiosk:layout_behavior="carl.fri.fer.views.KioskPaginator.KioskPaginatorScrollBehaviour"/>
</android.support.design.widget.CoordinatorLayout>
Die "android_toolbar" schließen sich wie folgt:
<?xml version="1.0" encoding="utf-8"?>
<carl.fri.fer.views.KioskToolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
android:minHeight="?attr/actionBarSize"/>
und die "paginator_layout" ist die folgende:
<?xml version="1.0" encoding="utf-8"?>
<carl.fri.fer.views.KioskPaginator.KioskPaginator
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/kpPaginator"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:animateLayoutChanges="true"
android:background="@color/primaryColor"
android:clickable="true"
android:orientation="horizontal">
<TextView
android:id="@+id/tvCurrentPage"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:padding="10dp"
android:textColor="@color/color_pure_black"
android:textSize="17sp"/>
<LinearLayout
android:id="@+id/llMoreOptions"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:background="@android:color/transparent"
android:gravity="center_vertical"
android:orientation="horizontal"/>
<TextView
android:id="@+id/tvTotalPages"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="center"
android:padding="10dp"
android:textColor="@color/color_pure_black"
android:textSize="17sp"/>
</carl.fri.fer.views.KioskPaginator.KioskPaginator>
Und das ScrollBehavior ist wie folgt:
public class KioskPaginatorScrollBehaviour extends AppBarLayout.ScrollingViewBehavior {
public KioskPaginatorScrollBehaviour(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
return dependency instanceof AppBarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
float depY = - dependency.getHeight();
depY -= dependency.getY();
Utils.log("dependency", "" + depY);
child.setTranslationY(depY);
return true;
}
}
Innerhalb jeder Seite des ViewPager befindet sich ein Fragment. Und der Inhalt dieses Fragments ist ein RecyclerView mit dynamischem Inhalt. Der gesamte Inhalt der RecyclerView wird aus der Datenbank geladen und Bilder werden zur Laufzeit geladen.
Kann mir bitte jemand sagen, warum passiert dieses seltsame Verhalten? Wie kann ich es reparieren? 1
Vielen Dank im Voraus ...
EDIT:
ich nur die Ursache für das seltsame Verhalten entdeckt! Der ViewPager lädt die aktuelle Seite und die angrenzenden Seiten. Der Inhalt des RecyclerView lädt aus dem Internet und sobald er geladen ist, geht es in den RecyclerView. Der ViewPager lädt zuerst die aktuelle Seite und dann die angrenzenden Seiten. Wenn ich die aktuelle Seite RecyclerView (Toolbar ist ausgeblendet) scrollte, wenn der 2. RecyclerView nur den Inhalt lädt und anzeigt, setzt er das aktuelle AppBarLayout-Verhalten zurück, so dass es mein benutzerdefiniertes Ansichtsverhalten zurücksetzt ... Wie kann ich das beheben? Ich möchte zu vermeiden, nicht angrenzende Ansichten Laden ..
EDIT 2:
Ok, geschieht es, wenn angrenzende Seiten von ViewPager
Laden und auch wenn aus dem Internet Bilder im Inneren des RecyclerView
geladen ... diese ist verrückt.
Können Sie Projekt irgendwo veröffentlichen (z auf Github), um können wir leicht Problem zu reproduzieren? – Divers
Es tut mir leid, aber das ist ein privates Projekt ... Ich denke, dass es fast alle Informationen gibt, die Sie brauchen. Ich werde jedoch versuchen, es in ein anderes Projekt zu übertragen, um zu versuchen, das Problem dort zu reproduzieren. –
Erstellen Sie einfach ein Projekt, das das Problem reproduziert. Keine Notwendigkeit, Ihr wirkliches Projekt zu veröffentlichen. – Divers