簡體   English   中英

為CoordinatorLayout中的另一個自定義視圖獲取FAB的相同行為

[英]Get identical behavior of FAB for another custom view inside CoordinatorLayout

我正在嘗試使用RelativeLayout而不是FAB來實現以下UI。 但是RelativeLayout的崩潰不會像FAB那樣發生。 在此處輸入圖片說明

<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/main_content"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            android:fitsSystemWindows="true"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleMarginEnd="64dp">

            <ImageView
                android:id="@+id/backdrop"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="parallax" 
                android:src="@drawable/default_img"/>

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                app:layout_collapseMode="pin" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:orientation="vertical"
            android:paddingTop="24dp">
        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

    <RelativeLayout
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|right|end"
        android:id="@+id/cust_fab_container"
        app:layout_behavior=".ScrollingBehavior">
        <View
            android:id="@+id/target"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:background="@drawable/circle_drawable"
            android:visibility="invisible"
            android:layout_alignParentRight="true"
            android:layout_marginRight="-48dp">
        </View>

        <rjsv.floatingmenu.floatingmenubutton.FloatingMenuButton
            android:id="@+id/my_floating_button"
            android:layout_width="65dp"
            android:layout_height="65dp">
        </rjsv.floatingmenu.floatingmenubutton.FloatingMenuButton>

  </RelativeLayout>

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

為了實現FAB行為,我附加了一個自定義行為,它會進行動畫處理,但自定義按鈕會向下移動,即它無法按需工作

    public class ScrollingBehavior extends CoordinatorLayout.Behavior<RelativeLayout>{
       private int toolbarHeight;

       public ScrollingBehavior(Context context, AttributeSet attrs) {
           super(context, attrs);
           this.toolbarHeight = Utils.getToolbarHeight(context);
       }

       @Override
       public boolean layoutDependsOn(CoordinatorLayout parent, RelativeLayout layout, View dependency) {
           return dependency instanceof AppBarLayout;
       }

       @Override
       public boolean onDependentViewChanged(CoordinatorLayout parent, RelativeLayout layout, View dependency) {
           if (dependency instanceof AppBarLayout) {
              CoordinatorLayout.LayoutParams lp =
                (CoordinatorLayout.LayoutParams) layout.getLayoutParams();
              int fabBottomMargin = lp.bottomMargin;
              int distanceToScroll = layout.getHeight() + fabBottomMargin;
              float ratio = (float)dependency.getY()/(float)toolbarHeight;
              layout.setTranslationY(-distanceToScroll * ratio);
          }
       return true;
     }
   }

只需更改onDependentViewChanged方法內的動畫邏輯即可,並且可以正常工作。

   @Override
   public boolean onDependentViewChanged(CoordinatorLayout parent, RelativeLayout layout, View dependency) {
       if (dependency instanceof AppBarLayout) {
          fab.setTranslationY(-dependency.getScrollY());
   }

暫無
暫無

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

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