Reputation: 1009
I need a float action menu with horizontal direction, I found this library but it's linked to listview and not what I look for, I tested 'com.github.clans:fab:1.6.4' it's really good but always no horizontal direction.
any idea to find out ?
Upvotes: 0
Views: 1264
Reputation: 1009
Thank's @Mayank for the code and the idea, for everyone with the same problem, this the code :
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:padding="6dp"
>
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/parentlayout"
android:layout_gravity="left"
android:fitsSystemWindows="true"
android:clipChildren="false"
android:clipToPadding="false"
>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginRight="120dp"
app:backgroundTint="@color/TealDark"
app:elevation="6dp"
app:fabSize="mini"
app:pressedTranslationZ="-12dp"
android:src="@drawable/fab_add"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginRight="90dp"
android:visibility="invisible"
app:elevation="6dp"
app:fabSize="mini"
app:backgroundTint="@color/TealDark"
app:pressedTranslationZ="-12dp"
android:src="@drawable/file_image" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_gravity="bottom"
android:visibility="invisible"
app:elevation="6dp"
app:fabSize="mini"
app:backgroundTint="@color/TealDark"
app:pressedTranslationZ="-12dp"
android:src="@drawable/filevideo" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="-75dp"
android:layout_gravity="bottom"
android:visibility="invisible"
app:elevation="6dp"
app:fabSize="mini"
app:backgroundTint="@color/TealDark"
app:pressedTranslationZ="-12dp"
android:src="@drawable/audiobook" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="-158dp"
android:layout_gravity="bottom"
android:visibility="invisible"
app:elevation="6dp"
app:fabSize="mini"
app:backgroundTint="@color/TealDark"
app:pressedTranslationZ="-12dp"
android:src="@drawable/file" />
</android.support.design.widget.CoordinatorLayout>
</LinearLayout>
for code java I use the same above :
final FloatingActionButton fab,fab1,fab2, fab3, fab4;
fab = (FloatingActionButton)conformity_child.findViewById(R.id.fab);
fab1 = (FloatingActionButton)conformity_child.findViewById(R.id.fab1);
fab2 = (FloatingActionButton)conformity_child.findViewById(R.id.fab2);
fab3 = (FloatingActionButton)conformity_child.findViewById(R.id.fab3);
fab4 = (FloatingActionButton)conformity_child.findViewById(R.id.fab4);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isFabOpen){
fab.startAnimation(rotate_backward);
fab1.startAnimation(fab_close);
fab2.startAnimation(fab_close);
fab3.startAnimation(fab_close);
fab4.startAnimation(fab_close);
fab1.setClickable(false);
fab2.setClickable(false);
fab3.setClickable(false);
fab4.setClickable(false);
isFabOpen = false;
} else {
fab.startAnimation(rotate_forward);
fab1.startAnimation(fab_open);
fab2.startAnimation(fab_open);
fab3.startAnimation(fab_open);
fab4.startAnimation(fab_open);
fab1.setClickable(true);
fab2.setClickable(true);
fab3.setClickable(true);
fab4.setClickable(true);
isFabOpen = true;
}
}
});
animation : 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.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/linear_interpolator"
android:toXScale="0.8"
android:pivotX="50%"
android:pivotY="50%"
android:toYScale="0.8" />
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="300"/>
</set>
animation : 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.8"
android:fromYScale="0.8"
android:interpolator="@android:anim/linear_interpolator"
android:toXScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:toYScale="0.0" />
<alpha android:fromAlpha="1.0"
android:toAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="300"/>
</set>
Upvotes: 1
Reputation: 1346
The easiest way to do without any library is to set one FAB visible and the other two invisible, and make the two visible on the click of first FAB. Adding some code snippets as i have used this type of FAB Styling, moreover you can add your animation to icons so give it feel good effect.
<?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:id="@+id/parentlayout"
android:background="#2a2a2a"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay">
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginRight="160dp"
android:visibility="invisible"
android:layout_marginBottom="16dp"
app:backgroundTint="@color/colorPrimary"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
android:src="@android:drawable/ic_menu_share" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginRight="90dp"
android:visibility="invisible"
android:layout_marginBottom="16dp"
app:elevation="6dp"
app:backgroundTint="@color/colorPrimary"
app:pressedTranslationZ="12dp"
android:src="@android:drawable/ic_menu_search" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:elevation="6dp"
app:backgroundTint="@color/colorPrimary"
app:pressedTranslationZ="12dp"
android:layout_margin="16dp"
android:src="@android:drawable/ic_input_add" />
And the usage in activity will be something like this.
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Boolean isFabOpen = false;
private FloatingActionButton fab,fab1,fab2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fab = (FloatingActionButton)findViewById(R.id.fab);
fab1 = (FloatingActionButton)findViewById(R.id.fab1);
fab2 = (FloatingActionButton)findViewById(R.id.fab2);
fab.setOnClickListener(this);
fab1.setOnClickListener(this);
fab2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id){
case R.id.fab:
animateFAB();
break;
case R.id.fab1:
break;
case R.id.fab2:
break;
}
}
public void animateFAB(){
if(isFabOpen){
/* fab.startAnimation(rotate_backward);
fab1.startAnimation(fab_close);
fab2.startAnimation(fab_close);*/
fab1.setClickable(false);
fab2.setClickable(false);
isFabOpen = false;
} else {
/* fab.startAnimation(rotate_forward);
fab1.startAnimation(fab_open);
fab2.startAnimation(fab_open);*/
fab1.setClickable(true);
fab2.setClickable(true);
isFabOpen = true;
}
}}
Upvotes: 0