zoukankan      html  css  js  c++  java
  • 弧形菜单2(动画渐入)Kotlin开发(附带java源码)

    弧形菜单2(动画渐入+Kotlin开发)

    前言:基于AndroidStudio的采用Kotlin语言开发的动画渐入的弧形菜单......

    效果:

    开发环境:AndroidStudio2.2.1+gradle-2.14.1

    涉及知识:1.自定义控件,2.事件分发等

    部分代码:

    Activity:

    class HomepageActivity : AppCompatActivity() {
    
        private var homePageMenuLayout: HomePageMenuLayout? = null
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.homepage_layout)
            initLayout()
        }
    
        private fun initLayout() {
            homePageMenuLayout = findViewById(R.id.homepage_layout) as HomePageMenuLayout
            //加载菜单列表
            homePageMenuLayout!!.setMenuItemIconsAndTexts(Constants.MENUALL)
            //才点动画初始
            SwitchAnimationUtil().startAnimation(homePageMenuLayout!!, SwitchAnimationUtil.AnimationType.ROTATE)
            //事件监听
            homePageMenuLayout!!.setOnMenuItemClickListener(object : HomePageMenuLayout.OnMenuItemClickListener {
                override fun itemClick(view: View, pos: Int) {
                    Toast.makeText(this@HomepageActivity, Constants.MENUALL[pos], Toast.LENGTH_SHORT).show()
                }
            })
        }
    
    }

    动画类:

    /**
     * 菜单动画加载类
     */
    class SwitchAnimationUtil {
        private var mOrderIndex = 0
        private val mDelay = 80
        private val mDuration = 500
    
        fun startAnimation(root: View, type: AnimationType) {
            bindAnimation(root, 0, type)
        }
    
        private fun bindAnimation(view: View, depth: Int, type: AnimationType) {
    
            if (view is ViewGroup) {
                val group = view
    
                for (i in 0..group.childCount - 1) {
                    bindAnimation(group.getChildAt(i), depth + 1, type)
                }
    
            } else {
                runAnimation(view, (mDelay * mOrderIndex).toLong(), type)
                mOrderIndex++
            }
        }
    
        private fun runAnimation(view: View, delay: Long, type: AnimationType) {
            when (type) {
                SwitchAnimationUtil.AnimationType.ROTATE -> runRotateAnimation(view, delay)
                SwitchAnimationUtil.AnimationType.ALPHA -> runAlphaAnimation(view, delay)
                else -> {
                }
            }
        }
    
        private fun runAlphaAnimation(view: View, delay: Long) {
            view.alpha = 0f
            val objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f)
            objectAnimator.startDelay = delay
            objectAnimator.duration = mDuration.toLong()
            objectAnimator.interpolator = LinearInterpolator()
            objectAnimator.start()
        }
    
        private fun runRotateAnimation(view: View, delay: Long) {
            view.alpha = 0f
            val set = AnimatorSet()
            val objectAnimator = ObjectAnimator.ofFloat(view, "rotation", 0f, 0f)
            val objectAnimator2 = ObjectAnimator.ofFloat(view, "scaleX", 0f, 1f)
            val objectAnimator3 = ObjectAnimator.ofFloat(view, "scaleY", 0f, 1f)
            val objectAnimator4 = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f)
    
            objectAnimator2.interpolator = AccelerateInterpolator(1.0f)
            objectAnimator3.interpolator = AccelerateInterpolator(1.0f)
    
            set.duration = mDuration.toLong()
            set.playTogether(objectAnimator, objectAnimator2, objectAnimator3, objectAnimator4)
            set.startDelay = delay
            set.start()
        }
    
        enum class AnimationType {
            ALPHA, ROTATE
        }
    }

    源码下载1(Kotlin版)...

    源码下载2(Java版)...

  • 相关阅读:
    HDU 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/xxdh/p/7016652.html
Copyright © 2011-2022 走看看