本文主要是爲了實現仿知乎FloatingActionButton浮動按鈕動畫效果實現(一)中提到的第四步驟:
設置點擊出現的子按鈕與描繪子按鈕出現的動畫效果。
這裏建議使用Github上的一個MD風格的開源組件:https://github.com/Clans/FloatingActionButton
源碼大概1K行,實現效果如下:
實現步驟如下:
1.在gradle中引入依賴包:
compile 'com.android.support:design:23.1.1' compile 'com.github.clans:fab:1.6.4'
2.修改佈局爲:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:paddingRight="10dp"
android:paddingBottom="45dp"
android:paddingLeft="10dp"
app:menu_colorNormal="@color/colorAccent"
app:menu_colorPressed="@color/colorAccentDark"
app:menu_icon="@drawable/ic_file_upload_white_24dp"
app:menu_labels_ellipsize="end"
app:menu_labels_singleLine="true"
app:menu_backgroundColor="#ccffffff">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:fab_colorNormal="@color/colorAccent"
app:fab_colorPressed="@color/colorAccentDark"
android:src="@drawable/ic_share_white_18dp"
app:fab_size="mini"
app:fab_label="分享" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab_upload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:fab_colorNormal="@color/colorAccent"
app:fab_colorPressed="@color/colorAccentDark"
android:src="@drawable/ic_send_white_18dp"
app:fab_size="mini"
app:fab_label="上傳" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/fab_preview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:fab_colorNormal="@color/colorAccent"
app:fab_colorPressed="@color/colorAccentDark"
android:src="@drawable/ic_chrome_reader_mode_white_18dp"
app:fab_size="mini"
app:fab_label="預覽" />
</com.github.clans.fab.FloatingActionMenu>
</android.support.design.widget.CoordinatorLayout>
可以看到將原有的單個floatingButton組件擴展爲menu父組件和三個小組件嵌套的模式,一目瞭然,也便於對每個子按鈕進行操作。
final FloatingActionMenu fab = (FloatingActionMenu) findViewById(R.id.fab);
fab.setClosedOnTouchOutside(true);
使用setClosedOnTouchOutside方法可以設置點擊蒙版關閉的開關。