Это то, что я пытаюсь достичь: пользовательского поведения не работает (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>
Здесь ваш ребенок Relativelayout и зависимый вид LinearLayout справа? –