弧形菜單2(動畫漸入)Kotlin開發(附帶java源碼),kotlinjava

來源:互聯網
上載者:User

弧形菜單2(動畫漸入)Kotlin開發(附帶java源碼),kotlinjava

弧形菜單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版)...

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.