package com.github.clans.fab.sample;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.view.ContextThemeWrapper;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.OvershootInterpolator;
import android.widget.Toast;
import com.github.fab.sample.R;
import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import java.util.ArrayList;
import java.util.List;
public class FloatingMenusActivity extends AppCompatActivity {
private FloatingActionButton fab1;
private FloatingActionButton fab2;
private FloatingActionButton fab3;
private FloatingActionButton fab12;
private FloatingActionButton fab22;
private FloatingActionButton fab32;
private List<FloatingActionMenu> menus = new ArrayList<>();
private Handler mUiHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.floating_menus_activity);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FloatingActionMenu menu1 = (FloatingActionMenu) findViewById(R.id.menu1);
final FloatingActionMenu menu2 = (FloatingActionMenu) findViewById(R.id.menu2);
final FloatingActionMenu menu3 = (FloatingActionMenu) findViewById(R.id.menu3);
FloatingActionMenu menu4 = (FloatingActionMenu) findViewById(R.id.menu4);
FloatingActionMenu menuDown = (FloatingActionMenu) findViewById(R.id.menu_down);
FloatingActionMenu menuLabelsRight = (FloatingActionMenu) findViewById(R.id.menu_labels_right);
final FloatingActionButton programFab1 = new FloatingActionButton(this);
programFab1.setButtonSize(FloatingActionButton.SIZE_MINI);
programFab1.setLabelText("Programmatically added button");
programFab1.setImageResource(R.drawable.ic_edit);
menu1.addMenuButton(programFab1);
programFab1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FloatingMenusActivity.this, programFab1.getLabelText(), Toast.LENGTH_SHORT).show();
}
});
ContextThemeWrapper context = new ContextThemeWrapper(this, R.style.MenuButtonsStyle);
FloatingActionButton programFab2 = new FloatingActionButton(context);
programFab2.setLabelText("Programmatically added button");
programFab2.setImageResource(R.drawable.ic_edit);
menu2.addMenuButton(programFab2);
menus.add(menuDown);
menus.add(menu1);
menus.add(menu2);
menus.add(menu3);
menus.add(menu4);
menus.add(menuLabelsRight);
menuDown.hideMenuButton(false);
menu1.hideMenuButton(false);
menu2.hideMenuButton(false);
menu3.hideMenuButton(false);
menu4.hideMenuButton(false);
menuLabelsRight.hideMenuButton(false);
int delay = 400;
for (final FloatingActionMenu menu : menus) {
mUiHandler.postDelayed(new Runnable() {
@Override
public void run() {
menu.showMenuButton(true);
}
}, delay);
delay += 150;
}
menu1.setClosedOnTouchOutside(true);
menu4.setIconAnimated(false);
menu2.setOnMenuToggleListener(new FloatingActionMenu.OnMenuToggleListener() {
@Override
public void onMenuToggle(boolean opened) {
String text = "";
if (opened) {
text = "Menu opened";
} else {
text = "Menu closed";
}
Toast.makeText(FloatingMenusActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
fab1 = (FloatingActionButton) findViewById(R.id.fab1);
fab2 = (FloatingActionButton) findViewById(R.id.fab2);
fab3 = (FloatingActionButton) findViewById(R.id.fab3);
fab12 = (FloatingActionButton) findViewById(R.id.fab12);
fab22 = (FloatingActionButton) findViewById(R.id.fab22);
fab32 = (FloatingActionButton) findViewById(R.id.fab32);
fab1.setEnabled(false);
fab1.setOnClickListener(clickListener);
fab2.setOnClickListener(clickListener);
fab3.setOnClickListener(clickListener);
fab12.setOnClickListener(clickListener);
fab22.setOnClickListener(clickListener);
fab32.setOnClickListener(clickListener);
final FloatingActionButton fabEdit = (FloatingActionButton) findViewById(R.id.fab_edit);
fabEdit.setShowAnimation(AnimationUtils.loadAnimation(this, R.anim.scale_up));
fabEdit.setHideAnimation(AnimationUtils.loadAnimation(this, R.anim.scale_down));
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fabEdit.show(true);
}
}, delay + 150);
findViewById(R.id.fab_edit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(FloatingMenusActivity.this, RecyclerViewActivity.class));
}
});
createCustomAnimation();
}
private void createCustomAnimation() {
final FloatingActionMenu menu3 = (FloatingActionMenu) findViewById(R.id.menu3);
AnimatorSet set = new AnimatorSet();
ObjectAnimator scaleOutX = ObjectAnimator.ofFloat(menu3.getMenuIconView(), "scaleX", 1.0f, 0.2f);
ObjectAnimator scaleOutY = ObjectAnimator.ofFloat(menu3.getMenuIconView(), "scaleY", 1.0f, 0.2f);
ObjectAnimator scaleInX = ObjectAnimator.ofFloat(menu3.getMenuIconView(), "scaleX", 0.2f, 1.0f);
ObjectAnimator scaleInY = ObjectAnimator.ofFloat(menu3.getMenuIconView(), "scaleY", 0.2f, 1.0f);
scaleOutX.setDuration(50);
scaleOutY.setDuration(50);
scaleInX.setDuration(150);
scaleInY.setDuration(150);
scaleInX.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
menu3.getMenuIconView().setImageResource(menu3.isOpened()
? R.drawable.ic_close : R.drawable.ic_star);
}
});
set.play(scaleOutX).with(scaleOutY);
set.play(scaleInX).with(scaleInY).after(scaleOutX);
set.setInterpolator(new OvershootInterpolator(2));
menu3.setIconToggleAnimatorSet(set);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = "";
switch (v.getId()) {
case R.id.fab1:
text = fab1.getLabelText();
break;
case R.id.fab2:
text = fab2.getLabelText();
fab2.setVisibility(View.GONE);
break;
case R.id.fab3:
text = fab3.getLabelText();
fab2.setVisibility(View.VISIBLE);
break;
case R.id.fab12:
text = fab12.getLabelText();
break;
case R.id.fab22:
text = fab22.getLabelText();
break;
case R.id.fab32:
text = fab32.getLabelText();
break;
}
Toast.makeText(FloatingMenusActivity.this, text, Toast.LENGTH_SHORT).show();
}
};
}