动画之卫星菜单

这里写图片描述

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);
        }

//        Math.PI/2=Math.toRadians(90)
        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);
        }
//        Math.PI/2=Math.toRadians(90)
        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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值