Android: Synchronisierte Bildlauf von zwei verschiedenen Ansichten

Ich habe ein heikles problem im Zusammenhang mit der synchronisierte Bildlauf von zwei
verschiedene Ansichten.
Ich habe meine eigenen grid-Ansicht widget, welches "sticky" Ansichten zu
die Links und oben, die nur in eine Richtung mit dem raster. Denken Sie an eine
Kalender, wo Sie mal an der Spitze, Termine, Links, und, wenn
Blättern Sie horizontal durch die Zeit, das Datum anzeigen soll bleiben,
und wenn Sie scrollen Sie vertikal durch die Termine, die Zeit anzeigen soll
Aufenthalt stellen.

Das raster selbst ist implementiert mithilfe einer geschachtelten horizontale scrollview in
eine vertikale scrollview. Das Gitter funktioniert Super, also kein problem.
Da die klebrige Ansichten nicht in das aktuelle Gitter habe ich überschrieben
onScrollChanged im raster scrollviews und programmgesteuert aufrufen
scrollTo auf dem klebrigen Blick, wenn der Benutzer scrollt das grid.

Funktioniert wie erwartet, außer, dass es einen leichten zeitlichen Versatz als
wenn die zwei verschiedenen Ansichten starten, scrollen und endet scrollen. Es
macht Sinn, wenn man bedenkt, dass das scrollen wahrscheinlich ausgeführt wird
Linear von den UI-thread nehme ich an..

Alle Ansichten sind scroll-Ansichten, und ich habe smooth-scrolling aktiviert
und verwendet smoothScrollTo, etc, anstatt zu versuchen, das zu verbessern, aber es ist
das gleiche problem dennoch. Das problem ist besonders deutlich auf
bei größeren Bildschirmen wie dem Samsung Galaxy Tab, in der Erwägung, dass es kaum
Auffällig auf small-medium-screen-Geräten.

Jede Hilfe ist willkommen! Wenn es eine einfache Lösung, Super..wenn es bedeutet,
neues design (das entspricht den klebrigen Blick Anwendungsfall oben), dann soll es so sein.

Code auslösen prog. scrollen, das gleiche gilt für die horizontale

@Override  
protected void onScrollChanged(int x, int y, int oldx, int oldy) {  
   mListener.onScrollY(y);  
   super.onScrollChanged(x, y, oldx, oldy);  
}  
//which leads to,  
//Handle vertical scroll  
public void onScrollY(final int y) {  
   mCurrentY = y;  
   mVerticalScroll.smoothScrollTo(0, y);  
}  

XML-layouts unten, wenn das helfen

Dem eigentlichen Gitter, die eine horizontale scroll-view, eingehüllt in einen vertikalen scroll-Ansicht und der Gitter-Elemente Hinzugefügt werden vertikal in der geschachtelten linearlayout
>

  < com.....VerticalScrollView  
    android:id="@+id/gridscroll" 
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent" 
    android:layout_below="@id/timescroll"
    android:layout_toRightOf="@id/vertscroll"  
    android:layout_alignTop="@id/vertscroll"  
    android:layout_marginLeft="2dp" android:scrollbars="none"  
    android:fadingEdge="none">   

    < com....HorizScrollView
    android:id="@+id/horizscroll"
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"
    android:scrollbars="none"  
    android:fadingEdge="none">  

    < LinearLayout android:id="@+id/grid"  
      android:layout_width="fill_parent"  
      android:layout_height="fill_parent"  
      android:orientation="vertical">  

      < /LinearLayout>  

      < /com.....HorizScrollView>  

      < /com.....VerticalScrollView>  

Die horizontale sticky Ansicht

 < com.....GridTimeScrollView
    android:id="@+id/timescroller" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="none"
    android:fadingEdge="none">

    < LinearLayout android:id="@+id/timelist"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" />
    < /com.....GridTimeScrollView>

Die vertikale sticky Ansicht

< com....GridVertListScrollView
android:id="@+id/vertscroller"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none" 
android:fadingEdge="none">

< LinearLayout
android:id="@+id/vertitemlist"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" />
< /com.....GridVertListScrollView>

InformationsquelleAutor Andreas | 2011-01-04

Schreibe einen Kommentar