优酷的菜单

控制旋转动画显示和隐藏

package com.itheima.youkumenu.utils;

import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.RotateAnimation;

public class MenuUtils {

    public static int animationCount = 0;
    /**
     * 隐藏菜单
     * @param menu 菜单布局
     */
    public static void hideMenu(ViewGroup menu,long startOffset) {
        createAnimation(menu, 0, -180,startOffset);
        //设置所有按钮不可以点击
        setIconClickable(menu,false);
    }

    /**
     * 处理菜单布局中按钮是否可以点击
     * @param menu  菜单的布局
     * @param clickable 是否可以点击
     */
    private static void setIconClickable(ViewGroup menu, boolean clickable) {
        for(int i = 0;i<menu.getChildCount();i++){
            View view = menu.getChildAt(i);
            //设置是否可以点击
            view.setClickable(clickable);
        }
    }

    /**
     * 显示菜单
     * @param menu 菜单布局
     */
    public static void showMenu(ViewGroup menu) {
        createAnimation(menu, -180, 0,0);
        //设置所有按钮可以点击
        setIconClickable(menu, true);
    }


    public static void createAnimation(ViewGroup menu,float from,float to,long startOffset){
        float fromDegrees = from;
        float toDegrees = to;
        int pivotXType = Animation.RELATIVE_TO_SELF;
        float pivotXValue = 0.5f;
        int pivotYType = Animation.RELATIVE_TO_SELF;
        float pivotYValue = 1f;
        RotateAnimation animation = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue);
        animation.setDuration(400);
        //给动画设置延迟执行的时间
        animation.setStartOffset(startOffset);
        //设置动画执行之后停在结束的状态
        animation.setFillAfter(true);
        animation.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                //动画开始执行
                animationCount++;
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                //动画重复执行
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                //动画结束
                --animationCount;
            }
        });
        menu.startAnimation(animation);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值