簡體   English   中英

自定義行為不起作用(CoordinatorLayout)

[英]Custom Behavior not working (CoordinatorLayout)

這就是我想要實現的目標: BottomSheetBehavior

我注意到從來沒有調用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>

您的LinearLayoutRelativeLayout的子項,因此app:layout_behavior沒有任何效果。

您只能指定app:layout_behavior來指導CoordinatorLayout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM