首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取CoordinatorLayout中另一个自定义视图的FAB的相同行为

获取CoordinatorLayout中另一个自定义视图的FAB的相同行为
EN

Stack Overflow用户
提问于 2017-05-17 18:46:36
回答 1查看 718关注 0票数 1

我正在尝试使用RelativeLayout而不是FAB来实现以下UI。但是RelativeLayout的崩溃不会像FAB那样发生。

代码语言:javascript
复制
<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行为,我附加了一个自定义行为,它是动画,但自定义按钮向下,即它不能按预期工作

代码语言:javascript
复制
    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;
     }
   }
EN

回答 1

Stack Overflow用户

发布于 2017-05-30 14:00:27

只需更改方法onDependentViewChanged内部的动画逻辑,它就可以工作。

代码语言:javascript
复制
   @Override
   public boolean onDependentViewChanged(CoordinatorLayout parent, RelativeLayout layout, View dependency) {
       if (dependency instanceof AppBarLayout) {
          fab.setTranslationY(-dependency.getScrollY());
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44022684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档