FloatingActionButton简称FAB。
一. 对于App或某个页面中是否要使用FloatingActionButton必要性:
FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App最主要的功能是通过该FAB操作的。
为了突出FAB的重要性,一个页面最好只有一个FAB。
二. FloatingActionButton大小
通常有两种尺寸
1. 56 * 56dp :默认的大小,最常用的尺寸。
2. 40 * 40 dp :Mini版。
当然也可以改它的大小。
三. 哪些操作推荐使用FloatingActionButton
如: 添加,收藏,编辑,分享,导航等,如下图:

而如:删除,警告,错误,剪切等操作,则不推荐使用FloatingActionButton。
四. FAB的使用
Android 5.0 中引入Material Design,FAB为Android Design Support Library支持包中的中Material Design控件,要使用FAB,先要引入Design Support Library包,如:在build.gradle中加入: compile 'com.android.support:design:X.X.X',X为支持包版本号,如下图:

FAB的继承关系:

FAB的XMl属性除了继承自View,ImageView的属性外,Android 5.0后引入的常用新属性如下:
注:使用下面属性,先要引入命名空间:xmlns:app="http:///apk/res-auto"
1> app:elevation="50dp":阴影的高度,elevation是Android 5.0中引入的新属性,设置该属性使控件有一个阴影,感觉该控件像是“浮”起来一样,这样达到3D效果。对应的方法:setCompatElevation(float)
2> app:fabSize="normal":FAB的大小,为normal时,大小为:56 * 56dp ,为mini时,大小为: 40 * 40 dp。
4> app:rippleColor="#e7d16b":点击FAB时,形成的波纹颜色。
<一> 使用例子1: 简单使用FAB
点击“+”悬浮按钮,弹出悬浮按钮菜单,效果如下:

代码如下:
XMl布局:
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout
3 xmlns:android="http:///apk/res/android"
4 xmlns:app="http:///apk/res-auto"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 >
8 <CheckBox
9 android:id="@+id/cbDelay"
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:text="delay"
13 android:layout_marginTop="10dp"
14 android:layout_marginLeft="10dp"
15 />
16 <RelativeLayout
17 android:id="@+id/rlAddBill"
18 android:layout_width="match_parent"
19 android:layout_height="match_parent"
20 android:background="#80000000"
21 android:visibility="gone"
22 >
23 <LinearLayout
24 android:id="@+id/ll01"
25 android:layout_width="match_parent"
26 android:layout_height="wrap_content"
27 android:layout_alignParentBottom="true"
28 android:layout_marginBottom="100dp"
29 android:orientation="horizontal"
30 >
31 <TextView
32 android:layout_toLeftOf="@+id/miniFab01"
33 android:layout_width="0dp"
34 android:layout_height="wrap_content"
35 android:layout_weight="1"
36 android:text="销售单"
37 android:textSize="15sp"
38 android:textColor="@android:color/white"
39 android:layout_gravity="center_vertical"
40 android:gravity="right"
41 android:paddingBottom="5dp"
42 />
43 <android.support.design.widget.FloatingActionButton
44 android:id="@+id/miniFab01"
45 android:layout_width="wrap_content"
46 android:layout_height="wrap_content"
47 android:src="@mipmap/ic_list_white_24dp"
48 android:layout_marginRight="25dp"
49 app:fabSize="mini"
50 app:elevation="5dp"
51 app:backgroundTint="@color/color_XSD"
52 />
53 </LinearLayout>
54 <LinearLayout
55 android:id="@+id/ll02"
56 android:layout_width="match_parent"
57 android:layout_height="wrap_content"
58 android:orientation="horizontal"
59 android:layout_above="@+id/ll01"
60 >
61 <TextView
62 android:layout_toLeftOf="@+id/miniFab02"
63 android:layout_width="0dp"
64 android:layout_height="wrap_content"
65 android:layout_weight="1"
66 android:text="销售退货"
67 android:textSize="15sp"
68 android:textColor="@android:color/white"
69 android:layout_gravity="center_vertical"
70 android:gravity="right"
71 android:paddingBottom="5dp"
72 />
73 <android.support.design.widget.FloatingActionButton
74 android:id="@+id/miniFab02"
75 android:layout_width="wrap_content"
76 android:layout_height="wrap_content"
77 android:src="@mipmap/ic_list_white_24dp"
78 android:layout_marginRight="25dp"
79 app:fabSize="mini"
80 app:elevation="5dp"
81 app:backgroundTint="@color/color_XSTH"
82 />
83 </LinearLayout>
84 <LinearLayout
85 android:id="@+id/ll03"
86 android:layout_width="match_parent"
87 android:layout_height="wrap_content"
88 android:orientation="horizontal"
89 android:layout_above="@+id/ll02"
90 >
91 <TextView
92 android:layout_toLeftOf="@+id/miniFab02"
93 android:layout_width="0dp"
94 android:layout_height="wrap_content"
95 android:layout_weight="1"
96 android:text="收款单"
97 android:textSize="15sp"
98 android:textColor="@android:color/white"
99 android:layout_gravity="center_vertical"
100 android:gravity="right"
101 android:paddingBottom="5dp"
102 />
103 <android.support.design.widget.FloatingActionButton
104 android:id="@+id/miniFab03"
105 android:layout_width="wrap_content"
106 android:layout_height="wrap_content"
107 android:src="@mipmap/ic_list_white_24dp"
108 android:layout_marginRight="25dp"
109 app:fabSize="mini"
110 app:elevation="5dp"
111 app:backgroundTint="@color/color_SKD"
112 />
113 </LinearLayout>
114 <LinearLayout
115 android:id="@+id/ll04"
116 android:layout_width="match_parent"
117 android:layout_height="wrap_content"
118 android:orientation="horizontal"
119 android:layout_above="@+id/ll03"
120 >
121 <TextView
122 android:layout_toLeftOf="@+id/miniFab02"
123 android:layout_width="0dp"
124 android:layout_height="wrap_content"
125 android:layout_weight="1"
126 android:text="进货单"
127 android:textSize="15sp"
128 android:textColor="@android:color/white"
129 android:layout_gravity="center_vertical"
130 android:gravity="right"
131 android:paddingBottom="5dp"
132 />
133 <android.support.design.widget.FloatingActionButton
134 android:id="@+id/miniFab04"
135 android:layout_width="wrap_content"
136 android:layout_height="wrap_content"
137 android:src="@mipmap/ic_list_white_24dp"
138 android:layout_marginRight="25dp"
139 app:fabSize="mini"
140 app:elevation="5dp"
141 app:backgroundTint="@color/color_JHD"
142 />
143 </LinearLayout>
144 <LinearLayout
145 android:id="@+id/ll05"
146 android:layout_width="match_parent"
147 android:layout_height="wrap_content"
148 android:orientation="horizontal"
149 android:layout_above="@+id/ll04"
150 >
151 <TextView
152 android:layout_toLeftOf="@+id/miniFab02"
153 android:layout_width="0dp"
154 android:layout_height="wrap_content"
155 android:layout_weight="1"
156 android:text="采购退货"
157 android:textSize="15sp"
158 android:textColor="@android:color/white"
159 android:layout_gravity="center_vertical"
160 android:gravity="right"
161 android:paddingBottom="5dp"
162 />
163 <android.support.design.widget.FloatingActionButton
164 android:id="@+id/miniFab05"
165 android:layout_width="wrap_content"
166 android:layout_height="wrap_content"
167 android:src="@mipmap/ic_list_white_24dp"
168 android:layout_marginRight="25dp"
169 app:fabSize="mini"
170 app:elevation="5dp"
171 app:backgroundTint="@color/color_CGTH"
172 />
173 </LinearLayout>
174 <LinearLayout
175 android:id="@+id/ll06"
176 android:layout_width="match_parent"
177 android:layout_height="wrap_content"
178 android:orientation="horizontal"
179 android:layout_above="@+id/ll05"
180 >
181 <TextView
182 android:layout_toLeftOf="@+id/miniFab02"
183 android:layout_width="0dp"
184 android:layout_height="wrap_content"
185 android:layout_weight="1"
186 android:text="付款单"
187 android:textSize="15sp"
188 android:textColor="@android:color/white"
189 android:layout_gravity="center_vertical"
190 android:gravity="right"
191 android:paddingBottom="5dp"
192 />
193 <android.support.design.widget.FloatingActionButton
194 android:id="@+id/miniFab06"
195 android:layout_width="wrap_content"
196 android:layout_height="wrap_content"
197 android:src="@mipmap/ic_list_white_24dp"
198 android:layout_marginRight="25dp"
199 app:fabSize="mini"
200 app:elevation="5dp"
201 app:backgroundTint="@color/color_FKD"
202 />
203 </LinearLayout>
204 </RelativeLayout>
205 <android.support.design.widget.FloatingActionButton
206 android:id="@+id/fab01Add"
207 android:layout_width="wrap_content"
208 android:layout_height="wrap_content"
209 android:layout_alignParentRight="true"
210 android:layout_alignParentBottom="true"
211 android:src="@mipmap/ic_add_white_24dp"
212 android:layout_marginRight="15dp"
213 android:layout_marginBottom="20dp"
214 app:fabSize="normal"
215 app:elevation="5dp"
216 app:backgroundTint="#31bfcf"
217 app:rippleColor="#e7d161"
218 />
219 </RelativeLayout>Java代码:
1 package com.zst.floatactionbutton;
2 import android.animation.Animator;
3 import android.animation.AnimatorInflater;
4 import android.animation.AnimatorSet;
5 import android.content.Intent;
6 import android.content.res.ColorStateList;
7 import android.os.Bundle;
8 import android.support.annotation.Nullable;
9 import android.support.design.widget.FloatingActionButton;
10 import .AppCompatActivity;
11 import android.view.View;
12 import android.view.WindowManager;
13 import android.widget.CheckBox;
14 import android.widget.LinearLayout;
15 import android.widget.RelativeLayout;
16 /**
17 * Created by shengtao_zeng on 2016/11/10.
18 */
19 public class BasicFABActivity extends AppCompatActivity implements View.OnClickListener{
20 private CheckBox cbDelay;
21 private FloatingActionButton fab01Add;
22 private boolean isAdd = false;
23 private RelativeLayout rlAddBill;
24 private int[] llId = new int[]{.ll01,.ll02,.ll03,.ll04,.ll05,.ll06};
25 private LinearLayout[] ll = new LinearLayout[llId.length];
26 private int[] fabId = new int[]{.miniFab01,.miniFab02,.miniFab03,.miniFab04,.miniFab05,.miniFab06};
27 private FloatingActionButton[] fab = new FloatingActionButton[fabId.length];
28 private AnimatorSet addBillTranslate1;
29 private AnimatorSet addBillTranslate2;
30 private AnimatorSet addBillTranslate3;
31 private AnimatorSet addBillTranslate4;
32 private AnimatorSet addBillTranslate5;
33 private AnimatorSet addBillTranslate6;
34 @Override
35 protected void onCreate(@Nullable Bundle savedInstanceState) {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.basic_fab_activity);
38 initView();
39 setDefaultValues();
40 bindEvents();
41 }
42 private void initView(){
43 cbDelay = (CheckBox)findViewById(.cbDelay);
44 fab01Add = (FloatingActionButton)findViewById(.fab01Add);
45 rlAddBill = (RelativeLayout)findViewById(.rlAddBill);
46 for (int i = 0; i < llId.length;i++){
47 ll[i] = (LinearLayout)findViewById(llId[i]);
48 }
49 for (int i = 0;i < fabId.length; i++){
50 fab[i] = (FloatingActionButton)findViewById(fabId[i]);
51 }
52 }
53 private void setDefaultValues(){
54 addBillTranslate1 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
55 addBillTranslate2 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
56 addBillTranslate3 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
57 addBillTranslate4 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
58 addBillTranslate5 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
59 addBillTranslate6 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
60 }
61 private void bindEvents(){
62 fab01Add.setOnClickListener(this);
63 for (int i = 0;i < fabId.length; i++){
64 fab[i].setOnClickListener(this);
65 }
66 }
67 @Override
68 public void onClick(View v) {
69 switch (v.getId()) {
70 case .fab01Add:
71 fab01Add.setImageResource(isAdd ? R.mipmap.ic_add_white_24dp:R.mipmap.ic_close_white_24dp);
72 isAdd = !isAdd;
73 rlAddBill.setVisibility(isAdd ? View.VISIBLE : View.GONE);
74 if (isAdd) {
75 addBillTranslate1.setTarget(ll[0]);
76 addBillTranslate1.start();
77 addBillTranslate2.setTarget(ll[1]);
78 addBillTranslate2.setStartDelay(cbDelay.isChecked() ? 150 : 0);
79 addBillTranslate2.start();
80 addBillTranslate3.setTarget(ll[2]);
81 addBillTranslate3.setStartDelay(cbDelay.isChecked() ? 200 : 0);
82 addBillTranslate3.start();
83 addBillTranslate4.setTarget(ll[3]);
84 addBillTranslate4.setStartDelay(cbDelay.isChecked() ? 250 : 0);
85 addBillTranslate4.start();
86 addBillTranslate5.setTarget(ll[4]);
87 addBillTranslate5.setStartDelay(cbDelay.isChecked() ? 300 : 0);
88 addBillTranslate5.start();
89 addBillTranslate6.setTarget(ll[5]);
90 addBillTranslate6.setStartDelay(cbDelay.isChecked() ? 350 : 0);
91 addBillTranslate6.start();
92 }
93 break;
94 case .miniFab01:
95 hideFABMenu();
96 break;
97 case .miniFab02:
98 hideFABMenu();
99 break;
100 case .miniFab03:
101 hideFABMenu();
102 break;
103 case .miniFab04:
104 hideFABMenu();
105 break;
106 case .miniFab05:
107 hideFABMenu();
108 break;
109 case .miniFab06:
110 hideFABMenu();
111 break;
112 default:
113 break;
114 }
115 }
116 private void hideFABMenu(){
117 rlAddBill.setVisibility(View.GONE);
118 fab01Add.setImageResource(R.mipmap.ic_add_white_24dp);
119 isAdd = false;
120 }
121 }Property Animation定义:
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http:///apk/res/android"
3 android:ordering="sequentially"
4 >
5 <set
6 android:ordering="together"
7 >
8 <objectAnimator
9 android:propertyName="translationY"
10 android:valueFrom="100.00"
11 android:valueTo="-50.00"
12 android:duration="100"
13 android:startOffset="0"
14 android:repeatCount="0"
15 android:valueType="floatType"
16 />
17 <objectAnimator
18 android:propertyName="alpha"
19 android:valueFrom="0.00"
20 android:valueTo="1.00"
21 android:duration="100"
22 android:startOffset="0"
23 android:valueType="floatType"
24 android:repeatCount="0"
25 />
26 <objectAnimator
27 android:propertyName="scaleY"
28 android:valueFrom="0.00"
29 android:valueTo="1.50"
30 android:duration="100"
31 android:startOffset="0"
32 android:valueType="floatType"
33 android:repeatCount="0"
34 />
35 </set>
36 <set
37 android:ordering="together"
38 >
39 <objectAnimator
40 android:propertyName="translationY"
41 android:valueTo="0.00"
42 android:duration="100"
43 android:startOffset="0"
44 android:repeatCount="0"
45 android:valueType="floatType"
46 />
47 <objectAnimator
48 android:propertyName="scaleY"
49 android:valueTo="1.0"
50 android:duration="100"
51 android:startOffset="0"
52 android:valueType="floatType"
53 android:repeatCount="0"
54 />
55 </set>
56 </set>
<二> 使用例子2: FAB和ListView 的结合使用
效果如下:

a> ListView向下滚动时,添加联系人的悬浮按钮隐藏。
b> ListView向上滚动时,添加联系人的悬浮按钮显示。
c> ListView向下滚动1/4时,会显示“回到顶部”的悬浮按钮,点击该按钮,ListView显示的顶部Item返回到第一个Item。
ListView滚动和FAB的隐藏/显示的关系逻辑如下图:

代码如下:
XML布局:
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout
3 xmlns:android="http:///apk/res/android"
4 xmlns:app="http:///apk/res-auto"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 >
8 <ListView
9 android:id="@+id/lvContacts"
10 android:layout_width="match_parent"
11 android:layout_height="match_parent"
12 android:divider="#80000000"
13 android:dividerHeight="1px"
14 >
15 </ListView>
16 <android.support.design.widget.FloatingActionButton
17 android:id="@+id/fabAddContact"
18 android:layout_width="wrap_content"
19 android:layout_height="wrap_content"
20 android:layout_marginBottom="16dp"
21 android:layout_marginRight="8dp"
22 android:src="@mipmap/ic_person_add_white_24dp"
23 app:fabSize="normal"
24 android:layout_alignParentBottom="true"
25 android:layout_alignParentRight="true"
26 />
27 <android.support.design.widget.FloatingActionButton
28 android:id="@+id/fabUp"
29 android:layout_above="@+id/fabAddContact"
30 android:layout_width="wrap_content"
31 android:layout_height="wrap_content"
32 android:layout_marginBottom="16dp"
33 android:layout_marginRight="20dp"
34 android:src="@mipmap/ic_keyboard_arrow_up_white_24dp"
35 app:fabSize="mini"
36 android:layout_alignParentRight="true"
37 app:backgroundTint="#92be0a"
38 android:visibility="gone"
39 />
40 </RelativeLayout>主逻辑代码:
1 package com.zst.floatactionbutton;
2 import android.animation.AnimatorInflater;
3 import android.animation.AnimatorSet;
4 import android.content.Context;
5 import android.os.Bundle;
6 import android.support.annotation.Nullable;
7 import android.support.design.widget.FloatingActionButton;
8 import .AppCompatActivity;
9 import android.view.LayoutInflater;
10 import android.view.View;
11 import android.view.ViewGroup;
12 import android.widget.AbsListView;
13 import android.widget.BaseAdapter;
14 import android.widget.ListView;
15 import android.widget.TextView;
16 import java.util.ArrayList;
17 import java.util.List;
18
19 public class FABInListViewActivity extends AppCompatActivity implements View.OnClickListener{
20 private ListView lvContacts;
21 private ContactsAdapter adapter;
22 private List<String> list = new ArrayList<>();
23 private long mNumber = 13812007799L;
24 private FloatingActionButton fabAddContact;
25 private FloatingActionButton fabUp;
26 private AnimatorSet mHideFAB;
27 private AnimatorSet mShowFAB;
28 private boolean FAB_VISIBLE = true;
29 private int mPreviousFirstVisibleItem; //记录前面第一个Item
30 private int mLastScrollY; //记录ListView中最上面的Item(View)的上一次顶部Y坐标()
31 private int mScrollThreshold = 2; //阈值:单位px
32 @Override
33 protected void onCreate(@Nullable Bundle savedInstanceState) {
34 super.onCreate(savedInstanceState);
35 setContentView(R.layout.fab_in_listview_activity);
36 initView();
37 setDefaultValues();
38 bindEvents();
39 }
40 private void initView(){
41 lvContacts = (ListView)findViewById(.lvContacts);
42 fabAddContact = (FloatingActionButton)findViewById(.fabAddContact);
43 fabUp = (FloatingActionButton)findViewById(.fabUp);
44 }
45 private void setDefaultValues(){
46 for (int i = 0; i < 100;i++){
47 list.add("Contact" + i + "+" + (mNumber + i));
48 }
49 adapter = new ContactsAdapter(this,list);
50 lvContacts.setAdapter(adapter);
51 initAnimation();
52 }
53 private void initAnimation(){
54 mHideFAB = (AnimatorSet)AnimatorInflater.loadAnimator(this,R.animator.scroll_hide_fab);
55 mShowFAB = (AnimatorSet)AnimatorInflater.loadAnimator(this,R.animator.scroll_show_fab);
56 mHideFAB.setTarget(fabAddContact);
57 mShowFAB.setTarget(fabAddContact);
58 }
59 private void bindEvents(){
60 fabUp.setOnClickListener(this);
61 lvContacts.setOnScrollListener(new AbsListView.OnScrollListener() {
62 @Override
63 public void onScrollStateChanged(AbsListView view, int scrollState) {
64 // if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { //停止滚动
65 //showFAB();
66 // }
67 }
68 @Override
69 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
70 if(totalItemCount == 0) {
71 showFAB();
72 return;
73 }
74 //滚动过程中:ListView中最上面一个Item还是同一个Item
75 if(isSameRow(firstVisibleItem)) {
76 int newScrollY = getTopItemScrollY();
77 boolean isExceedThreshold = Math.abs(mLastScrollY - newScrollY) > mScrollThreshold;
78 if (isExceedThreshold) {
79 if (mLastScrollY > newScrollY && FAB_VISIBLE == true) {
80 FAB_VISIBLE = false;
81 hideFAB();
82 } else if(mLastScrollY < newScrollY && FAB_VISIBLE == false){
83 FAB_VISIBLE = true;
84 showFAB();
85 }
86 }
87 mLastScrollY = newScrollY;
88 } else {
89 if (firstVisibleItem > mPreviousFirstVisibleItem && FAB_VISIBLE == true){ //向下滚动
90 FAB_VISIBLE = false;
91 hideFAB();
92 } else if(firstVisibleItem < mPreviousFirstVisibleItem && FAB_VISIBLE == false){ //向上滚动
93 FAB_VISIBLE = true;
94 showFAB();
95 }
96 mLastScrollY = getTopItemScrollY();
97 mPreviousFirstVisibleItem = firstVisibleItem;
98 }
99 if (firstVisibleItem > (totalItemCount/4)) {
100 fabUp.setVisibility(View.VISIBLE);
101 } else {
102 fabUp.setVisibility(View.GONE);
103 }
104 }
105 });
106 }
107 private boolean isSameRow(int firstVisisbleItem){
108 return mPreviousFirstVisibleItem == firstVisisbleItem;
109 }
110 /**
111 * 滚动过程中,获得当前ListView中最上面的Item(View)的顶部的Y坐标(以px为单位)
112 * @return
113 */
114 private int getTopItemScrollY() {
115 if (lvContacts == null || lvContacts.getChildAt(0) == null) return 0;
116 View topChild = lvContacts.getChildAt(0);
117 return topChild.getTop();
118 }
119 @Override
120 public void onClick(View v) {
121 switch (v.getId()) {
122 case .fabUp:
123 lvContacts.setSelection(0);
124 fabUp.setVisibility(View.GONE);
125 break;
126 default:
127 break;
128 }
129 }
130 private void hideFAB() {
131 mHideFAB.start();
132 }
133 private void showFAB(){
134 mShowFAB.start();
135 }
136 class ContactsAdapter extends BaseAdapter {
137 private Context mContext;
138 private List<String> list;
139 public ContactsAdapter(Context mContext,List<String> list) {
140 this.mContext = mContext;
141 this.list = list;
142 }
143 @Override
144 public int getCount() {
145 return list.size();
146 }
147 @Override
148 public Object getItem(int position) {
149 return list.get(position);
150 }
151 @Override
152 public long getItemId(int position) {
153 return position;
154 }
155 @Override
156 public View getView(int position, View convertView, ViewGroup parent) {
157 convertView = LayoutInflater.from(mContext).inflate(R.layout.contacts_item,null);
158 TextView tvName = (TextView)convertView.findViewById(.tvName);
159 TextView tvNumber = (TextView)convertView.findViewById(.tvNumber);
160 tvName.setText((list.get(position).split("\\+"))[0]);
161 tvNumber.setText((list.get(position).split("\\+"))[1]);
162 return convertView;
163 }
164 }
165 }Property Animation定义如下:
scroll_hide_fab.xml:
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http:///apk/res/android"
3 android:ordering="together"
4 >
5 <objectAnimator
6 android:propertyName="translationY"
7 android:valueTo="500.00"
8 android:duration="200"
9 android:startOffset="0"
10 android:repeatCount="0"
11 android:valueType="floatType"
12 />
13 <objectAnimator
14 android:propertyName="alpha"
15 android:valueFrom="1.00"
16 android:valueTo="0.00"
17 android:duration="200"
18 android:startOffset="0"
19 android:valueType="floatType"
20 android:repeatCount="0"
21 />
22 </set>scroll_show_fab.xml:
1 <?xml version="1.0" encoding="utf-8"?>
2 <set xmlns:android="http:///apk/res/android"
3 android:ordering="together"
4 >
5 <objectAnimator
6 android:propertyName="translationY"
7 android:valueTo="0.0"
8 android:duration="100"
9 android:startOffset="0"
10 android:repeatCount="0"
11 android:valueType="floatType"
12 />
13 <objectAnimator
14 android:propertyName="alpha"
15 android:valueFrom="0.00"
16 android:valueTo="1.00"
17 android:duration="100"
18 android:startOffset="0"
19 android:valueType="floatType"
20 android:repeatCount="0"
21 />
22 </set>
















