我在一个片段中有一个浮动的动作按钮,里面有3个其他的迷你标签,它们在弧形中动画出来。main FAB工作正常,并在miniFabs上调用动画,但由于某些原因,miniFabs不可点击。我可以轻松访问所有的Fab,但不能访问minifabs的setOnClickListener()。布局如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:fitsSystemWindows="true">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:text="@string/chatter"
android:textColor="@color/black" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_chatter_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/fab_first_menu_item_margin_bottom"
android:layout_marginEnd="@dimen/right_margin"
android:clickable="true"
android:focusable="true"
android:visibility="visible"
app:backgroundTint="@color/white"
app:fabSize="mini"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_chatter_new_video"
android:fitsSystemWindows="true" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_chatter_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/fab_bottom_margin"
android:layout_marginEnd="@dimen/fab_main_right_margin"
android:clickable="true"
android:focusable="true"
android:visibility="visible"
app:backgroundTint="@color/colorPrimary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:fabSize="normal"
app:srcCompat="@drawable/ic_chatter_new" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_chatter_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/fab_first_menu_item_margin_bottom"
android:layout_marginEnd="@dimen/right_margin"
android:clickable="true"
android:focusable="true"
android:visibility="visible"
app:backgroundTint="@color/white"
app:fabSize="mini"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_chatter_new_photo" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_chatter_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/fab_first_menu_item_margin_bottom"
android:layout_marginEnd="@dimen/right_margin"
android:clickable="true"
android:focusable="true"
android:visibility="visible"
app:backgroundTint="@color/white"
app:fabSize="mini"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_chatter_new_text" />
<LinearLayout
android:id="@+id/main_chatter_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.45"
android:orientation="vertical"
android:visibility="invisible"
android:background="@color/mainColor"
/>
</android.support.constraint.ConstraintLayout>我正在用这个代码动画fab_chatter_open,它工作得很好。单击动画和全部:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true" >
<rotate android:fromDegrees="45"
android:toDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="300"
android:interpolator="@android:anim/linear_interpolator"/>
</set>并在第二次单击FAB时反转此动画。
然后,我将使用此代码为miniFabs设置动画。miniFabs上的动画运行良好,但FAB无法以任何方式单击:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true" >
<translate android:fromXDelta="82%p" android:toXDelta="65%p"
android:fromYDelta="7%p" android:toYDelta="7%p"
android:duration = "100"/>
<alpha android:fromAlpha="0"
android:toAlpha="1"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="100"/>
</set>您还会注意到底部有一个Linearlayout。这是为了用50%的alpha覆盖recyclerView,以保持对fabs的关注,并使内容变暗。不幸的是,它没有像我喜欢的那样覆盖动作栏或底部导航。如果你也有实现这个目标的建议,请让我知道。
发布于 2018-08-30 10:19:09
显然,在受约束的布局中,当您使用translate设置浮动动作按钮的动画时,按钮的单击停留在创建和放大视图时FAB最初绘制的位置。我决定改为使用我的miniFabs浮动操作按钮上的页边距底部和页边距末端:
android:layout_marginBottom=""
android:layout_marginEnd=""当视图最初相对于主FAB进行绘制和放大时,将浮动操作按钮放在屏幕上我想要的位置。另外,由于这是一个受约束的布局,因此我使用:
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
将按钮放在主FAB所在的右下角,否则这些miniFabs的边距-底部和边距-顶部将很难计算。
然后我在miniFabs上使用动画alpha和动画scale。这使miniFabs保持在点击事件的相同位置,但为它们提供了一些动画,因此它们有一点天赋。
我还确保在将每个FAB的可见性设置为gone之后,将其isEnabled()属性设置为false,否则单击事件仍将存在。
https://stackoverflow.com/questions/52086762
复制相似问题