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

时间: 2024-10-12 12:33:40

弧形菜单2(动画渐入)Kotlin开发(附带java源码)的相关文章

Android源码开发利器——Java源码调试(基于4.1.2)

原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 调试Android Java源码 草帽的后花园--Neo 写在之前的话:这里主要是以调试Java源码为主,应该说是在system_process之后的源码,这对于调试和修改frameworks层的人来说真是一个利器,但至于为什么在system_process之后,我还在分析,如果有结果我会更新此文章,并正在尝试调试C++的代码,就是native中的代码,如果这个可行那将会大大

VC++环境下多文档模板应用程序开发(带源码)

我们以前见到的关于VC++环境下利用APP Wizard 自动生成的MDI的应用程序只支持打开同一文档类型的多个文件,但是不能够同时打开不同种类型的文档.网上的这种公开资料比较少,我在知网上查阅了相关的资料.下面我根据这些资料做一下总结(辛辛苦苦一个一个字码出来的). 下面设计一个能够处理两种文档类型的应用程序:第一种文档类型:TXT文档,第二种文档类型:Bub的文档类型. 第一种的文档类型TXT,是利用APP Wizard自动生成的,只不过是在设置的时候将文档类型设置为TXT类型,并且使生成的

WEB前端开发学习:源码canvas 雪

WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body style="overflow: hidden;margin:

非常精美的jQuery背景动画全屏焦点图(附源码)

1.  jquery背景动画个性全屏焦点图 源码下载  /  在线演示 2. 圣诞快乐礼盒破裂HTML5特效 源码下载 /  在线演示 3. JS+CSS3实现时间日期特效 源码下载/   在线演示 非常精美的jQuery背景动画全屏焦点图(附源码)

最新六合彩投注网站系统出租,网站建设,开发,及源码(可商业运行)

这是最新六合彩投注网站系统建设,开发,及源码(可商业运行),六合彩系统 带新开奖结果>>>>>玩法齐全,各类玩法内附说明.数据库文件  hs001   修改数据库连接  文件夹 configs  文件config后台管理 admin admin前台会员目录 member <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op>

仿映客客户端、TableView多种动画效果、边缘返回手势等源码

iOS精选源码 相册多选框架 zhPopupController 简单快捷弹出自定义视图 tableView实现多种动画效果 自定义动画的PageControl 展示tableView和collectionView的结构,框架CHD_ListView_Structure RxSwift+Moya+ObjectMapper优雅的网络请求级模型转换 多种指示器文字效果源码SGPagingView react-native低仿映客直播客户端 支持iOS/Android ScreenEdgePanGes

前端工程师开发APICloud应用源码集锦

现在APICloud开发者众多,各位前端开发者也可以利用自己擅长的技术来开发属于自己的APP,很多人会问,如何开发,下面就整理出来十款分享出来的源码给大家参考和学习: 仿QQ电影票源码 web前端开发者的尝试,仿炫酷的QQ电影票前端源码 http://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=502 仿大众点评APP源码 测试apicloud的跨平台能力,仿大众点评APP前端源码 http://community.apiclo

Openfire开发配置,Openfire源码配置,OpenFire二次开发配置

1.下载源码:http://www.igniterealtime.org/downloads/source.jsp 2.把源码解压出的openfire_src目录放至eclipse workplace(注意:若是变更了解压出来的文件名称,则接下来全部用到文件名称的地方都要作出对应更改,否则会报错!) 3.把openfire_src目录里的三个没用的html文件删除 4.打开eclipse,新建一个名为openfire_src的Java Project,然后finish 注:此处的默认路径为ope

如何使用Android Studio开发/调试Android源码

本文是以源码中development/tools/idegen/README作为指导文档. 环境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源码 由于AS是基于IntelliJ IDEA开发的,所以本文也适用于IntelliJ IDEA 一.修改Android Studio(以下简称AS)的内存配置 因为在导入源码时需要消耗大量内存,所以先修改IDEA_HOME/bin/studio.vmoptions中-Xms