2016-04-05 2 views
3

ich für eine bessere Schatten unter meiner Symbolleiste Ansicht erzwingen verwendet zur Unterstützung nach hinten wie folgt aus:anzeigen Schatten Erhebung auf Unteransicht, wenn ein Scroll oder RecyclerView Z Index kleiner ist - Android Material Design

<View 
      android:id="@+id/toolbar_shadow" 
      android:layout_width="match_parent" 
      android:layout_height="4dp" 
      android:layout_below="@+id/toolbar" 
      android:background="@drawable/shadow_elevation" /> 

@drawable/shadow_elevation

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient 
     android:angle="90" 
     android:endColor="#12000000" 
     android:startColor="@android:color/transparent" /> 
</shape> 

enter image description here

Jetzt muss ich den gleichen Effekt tun, aber im Boden so etwas wie diese

<--Toolbar--> 
<--toolbar shadow--> 
<--Scroll View--> 
<--bottom shadow--> 
<--Bottom Layout--> 

Das Problem ist, ich will nicht den Boden Schatten immer sichtbar halten, mag ich nur die ‚unteren Schatten‘ zeigen, wenn die Scrollview ist ‚unten‘ der Boden Layout, über Z-Indizes sprechen.

Mit anderen Worten, was ich brauche, ist unteren Schatten zu zeigen, wenn scrollview unten das untere Layout top trifft.

Dies ist das Layout ohne Schatten auf Unteransicht:

enter image description here

Ich habe nachgedacht über den Code zu tun, überprüft Y Index der Ansicht, und wenn sie sie gleich sind, das ist gemein, dass das untere Layout muss eine höhere Höhe/TranslationZ als Scrollview haben, aber ich bin mir nicht sicher, ob dies die beste Option ist, ich denke, dass es vielleicht einen Weg gibt, mein Layout richtig einzustellen.

Irgendwelche Ideen?

Antwort

0

Ich fand einen Weg! Ich habe komplett vergessen, es hier zu setzen

Für diejenigen in Not, es funktioniert bisher schön.

public void setBottomLayoutElevation(View scrollView, View bottomView) { 

    if (scrollView instanceof NestedScrollView) { 
     NestedScrollView nestedScrollView = (NestedScrollView) scrollView; 
     nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { 
      @Override 
      public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 

       int max = nestedScrollView.getChildAt(0).getHeight() - nestedScrollView.getHeight(); 

       if (v.canScrollVertically(1)) { 
        int abs = Math.abs((scrollY * 100/max) - 100); 
        ViewCompat.setElevation(bottomView, Math.min(abs, 40)); 
       } else { 
        ViewCompat.setElevation(bottomView, 0); 
       } 
      } 
     }); 
    } 

    if (scrollView instanceof RecyclerView) { 
     ((RecyclerView) scrollView).addOnScrollListener(new RecyclerView.OnScrollListener() { 
      @Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
       ViewCompat.setElevation(bottomView, recyclerView.canScrollVertically(1) ? 30 : 0); 
      } 
     }); 
    } 
} 
Verwandte Themen