Android 实现卫星式环绕型菜单

Android 实现卫星式环绕型菜单_第1张图片
实现上述卫星式分布的菜单效果,首先在图中包含主菜单的按钮,其次包含各个子菜单的图标,具体呈现的效果就是在点击主菜单图标的时候,会实现依次展现子菜单图标,按照一定顺序实现旋转动画和平移动画。

具体实现的过程

1、动画

2、自定义ViewGroup

     1. 自定义属性

            a、构造attr.xml

            b、在布局文件中使用

            c、在自定义控件中进行读取

    2 . onMeasure

    3. onLayout

    4. 设置主按钮的旋转动画

   为menuItem设置平移动画和旋转动画

   实现menuItem的点击动画

工程目录

Android 实现卫星式环绕型菜单_第2张图片

自定义控件



    
        
        
        
        
    

    
    
    
        
        
    

布局文件




    
        
            
        

        

        

        

        
    

    
    
主菜单按钮和其他的按钮有所不同,由两张图片叠加形成

具体功能部分

切换菜单

两个状态:CLOSE和OPEN,需要了解清楚状态改变是在动画整体结束以后

    private void toggleMenu(int duration) {
        int count = getChildCount();
        for(int i = 0;i

构造函数

    public Menu(Context context) {
        this(context,null);
    }

    public Menu(Context context, AttributeSet attrs) {
        this(context, null,0);
    }

    public Menu(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,100,getResources().getDisplayMetrics());

        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Menu,defStyleAttr,0);

        int pos = a.getInt(R.styleable.Menu_position,POS_RIGHT_BOTTOM);
        switch (pos)
        {
            case POS_LEFT_TOP:
                mPosition = Position.LEFT_TOP;
                break;
            case POS_LEFT_BOTTOM:
                mPosition = Position.LEFT_BOTTOM;
                break;
            case POS_RIGHT_TOP:
                mPosition = Position.RIGHT_TOP;
                break;
            case POS_RIGHT_BOTTOM:
                mPosition = Position.RIGHT_BOTTOM;
                break;
        }

        mRadius = (int) a.getDimension(R.styleable.Menu_radius,TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,100,getResources().getDisplayMetrics()));

        Log.e("TAG","Position = "+mPosition + ",radius ="+mRadius);
        a.recycle();
    }
文章参考 自 https://www.imooc.com/learn/300  点击打开链接




你可能感兴趣的:(Android 实现卫星式环绕型菜单)