본문 바로가기

Android

FloatingActionButton 구현

 

dependencies 추가

  implementation 'com.google.android.material:material:1.3.0'

 

 

 

activity

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/fab_sub1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/fab_sub2"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="15dp"
                android:layout_marginRight="20dp"
                android:backgroundTint="#000000"
                android:visibility="invisible"
                app:borderWidth="0dp"
                app:fabSize="normal"/>

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/fab_sub2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/fab_main"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="15dp"
                android:layout_marginRight="20dp"
                android:backgroundTint="#000000"
                android:visibility="invisible"
                app:borderWidth="0dp"
                app:fabSize="normal"/>

            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/fab_main"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="20dp"
                android:layout_marginRight="20dp"
                android:backgroundTint="#009688"
                app:borderWidth="0dp"
                app:fabSize="normal"/>

        </RelativeLayout>

 

 

 

 

anim

 

fab_open

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">

    <scale
        android:duration="300"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.8"
        android:toYScale="0.8" />

    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="1.0" />

</set>

 

fab_close

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <scale
        android:duration="300"
        android:fromXScale="0.8"
        android:fromYScale="0.8"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.0"
        android:toYScale="0.0" />

    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:toAlpha="0.0" />

</set>

 

 

 

java

FloatingActionButton fab_main, fab_sub1, fab_sub2;
Animation fab_open, fab_close;
boolean isFabOpen = false;
    
        fab_main = (FloatingActionButton) findViewById(R.id.fab_main);
        fab_sub1 = (FloatingActionButton) findViewById(R.id.fab_sub1);
        fab_sub2 = (FloatingActionButton) findViewById(R.id.fab_sub2);

        fab_open = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fab_open);
        fab_close = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.fab_close);

        fab_main.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toggleFab();
            }
        });

        fab_sub1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toggleFab();
                dispatchTakePictureIntent();
            }
        });
        fab_sub2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toggleFab();
            }
        });
    private void toggleFab() {
        if (isFabOpen) {
            fab_sub1.startAnimation(fab_close);
            fab_sub2.startAnimation(fab_close);
            fab_sub1.setClickable(false);
            fab_sub2.setClickable(false);
            isFabOpen = false;
        } else {
            fab_sub1.startAnimation(fab_open);
            fab_sub2.startAnimation(fab_open);
            fab_sub1.setClickable(true);
            fab_sub2.setClickable(true);
            isFabOpen = true;
        }
    }

 

 

'Android' 카테고리의 다른 글

싱글톤 패턴  (0) 2021.07.21
Kotlin - lateinit,lazy  (0) 2021.07.07
당겨서 새로고침 기능 추가하기  (0) 2021.01.23
Activity 생명주기  (0) 2021.01.21
안드로이드 4대 컴포넌트  (0) 2021.01.20