
public class JointAnimActivity extends AppCompatActivity {
@BindView(R.id.but_start_anim)
Button butStartAnim;
@BindView(R.id.ciol)
Button ciol;
@BindView(R.id.but_menu1)
Button butMenu1;
@BindView(R.id.but_menu2)
Button butMenu2;
@BindView(R.id.but_menu3)
Button butMenu3;
@BindView(R.id.but_menu4)
Button butMenu4;
@BindView(R.id.but_menu5)
Button butMenu5;
boolean isOpen=false;
private final static int total=5;
private final static int radius=500;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.anim_joint);
ButterKnife.bind(this);
}
@OnClick({R.id.but_start_anim, R.id.ciol})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.but_start_anim:
onStartMenuAnim();
break;
case R.id.ciol:
break;
}
}
private void onStartMenuAnim() {
if (isOpen){
closeMenuAnim(butMenu1,0);
closeMenuAnim(butMenu2,1);
closeMenuAnim(butMenu3,2);
closeMenuAnim(butMenu4,3);
closeMenuAnim(butMenu5,4);
}else {
openMenuAnim(butMenu1,0);
openMenuAnim(butMenu2,1);
openMenuAnim(butMenu3,2);
openMenuAnim(butMenu4,3);
openMenuAnim(butMenu5,4);
}
isOpen =!isOpen;
}
private void closeMenuAnim(View view,int index) {
if (view.getVisibility() != View.VISIBLE) {
view.setVisibility(View.VISIBLE);
}
double degree=Math.PI/((total-1)*2)*index;
int tranX=-(int) (Math.sin(degree)*radius);
int tranY= -(int) (Math.cos(degree)*radius);
AnimatorSet animatorSet=new AnimatorSet();
animatorSet.playTogether(
ObjectAnimator.ofFloat(view,"translationX",tranX,0),
ObjectAnimator.ofFloat(view,"translationY",tranY,0),
ObjectAnimator.ofFloat(view,"scaleX",1f,0.1f),
ObjectAnimator.ofFloat(view,"scaleY",1f,0.1f),
ObjectAnimator.ofFloat(view,"alpha",1f,0f)
);
animatorSet.setDuration(500);
animatorSet.start();
}
private void openMenuAnim(View view,int index) {
if (view.getVisibility() != View.VISIBLE) {
view.setVisibility(View.VISIBLE);
}
double degree=Math.toRadians(90)/(total-1)*index;
int tranX=-(int) (Math.sin(degree)*radius);
int tranY= -(int) (Math.cos(degree)*radius);
AnimatorSet animatorSet=new AnimatorSet();
animatorSet.playTogether(
ObjectAnimator.ofFloat(view,"translationX",0,tranX),
ObjectAnimator.ofFloat(view,"translationY",0,tranY),
ObjectAnimator.ofFloat(view,"scaleX",0.1f,1f),
ObjectAnimator.ofFloat(view,"scaleY",0.1f,1f),
ObjectAnimator.ofFloat(view,"alpha",0f,1f)
);
animatorSet.setDuration(500);
animatorSet.start();
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/but_menu1"
android:layout_width="50dp"
android:layout_gravity="bottom|right"
android:background="@mipmap/ic_launcher_round"
android:layout_height="50dp"
android:layout_margin="@dimen/but_mg"
android:text=""/>
<Button
android:id="@+id/but_menu2"
android:layout_width="50dp"
android:layout_gravity="bottom|right"
android:background="@mipmap/ic_launcher_round"
android:layout_height="50dp"
android:layout_margin="@dimen/but_mg"
android:text=""/>
<Button
android:id="@+id/but_menu3"
android:layout_width="50dp"
android:layout_gravity="bottom|right"
android:background="@mipmap/ic_launcher_round"
android:layout_height="50dp"
android:layout_margin="@dimen/but_mg"
android:text=""/>
<Button
android:id="@+id/but_menu4"
android:layout_width="50dp"
android:layout_gravity="bottom|right"
android:background="@mipmap/ic_launcher_round"
android:layout_height="50dp"
android:layout_margin="@dimen/but_mg"
android:text=""/>
<Button
android:id="@+id/but_menu5"
android:layout_width="50dp"
android:layout_gravity="bottom|right"
android:background="@mipmap/ic_launcher_round"
android:layout_height="50dp"
android:layout_margin="@dimen/but_mg"
android:text=""/>
<Button
android:id="@+id/but_start_anim"
android:layout_width="50dp"
android:layout_gravity="bottom|right"
android:background="@mipmap/ic_launcher_round"
android:layout_height="50dp"
android:layout_margin="@dimen/but_mg"
android:text=""/>
</FrameLayout>
</RelativeLayout>