2016-06-01 1 views
1

Это то, что я пытаюсь достичь: BottomSheetBehaviorпользовательского поведения не работает (CoordinatorLayout)

Я заметил layoutDependsOn() и onDependentViewChanged() никогда не вызываются вовсе.

Ради тестирования, я попытался с помощью "масштабирование" вместо "установить XY" для пользовательского поведения:

public class CustomBehavior extends CoordinatorLayout.Behavior<LinearLayout> 
{ 
    public CustomBehavior(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    @Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, LinearLayout child, View dependency) 
    { 
     return dependency instanceof LinearLayout; 
    } 

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, LinearLayout child, View dependency) 
    { 
     float translationY = getTranslationY(parent, child); 
     float percentComplete = -translationY/dependency.getHeight(); 
     float scaleFactor = 1 - percentComplete; 

     child.setScaleX(scaleFactor); 
     child.setScaleY(scaleFactor); 
     return false; 
    } 

    private float getTranslationY(CoordinatorLayout parent, LinearLayout child) 
    { 
     float minOffset = 0; 
     final List<View> dependencies = parent.getDependencies(child); 

     for (int i = 0, z = dependencies.size(); i < z; i++) 
     { 
      final View view = dependencies.get(i); 
      if (view instanceof LinearLayout && parent.doViewsOverlap(child, view)) 
      { 
       minOffset = Math.min(minOffset, ViewCompat.getTranslationY(view) - view.getHeight()); 
      } 
     } 

     return minOffset; 
    } 
} 

И это XML-фрагмента:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:animateLayoutChanges="true" 
     android:clickable="true" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:id="@+id/myLinearLayout" 
      android:layout_width="330dp" 
      android:layout_marginTop="30dp" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:orientation="vertical" 
      app:layout_behavior="com.test.CustomBehavior"> 

      ... 

     </LinearLayout> 
    </RelativeLayout> 

    <LinearLayout 
     android:id="@+id/bottomSheetLayout" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:behavior_peekHeight="100dp" 
     app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> 

    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout> 
+0

Здесь ваш ребенок Relativelayout и зависимый вид LinearLayout справа? –

ответ

0

Ваш ребенок LinearLayout - ребенок RelativeLayout и, следовательно, app:layout_behavior не имеет никакого эффекта.

Отправлять детей CoordinatorLayout можно только app:layout_behavior.

Смежные вопросы