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

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

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

     原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038     调试Android Java源码 草帽的后花园——Neo 写在之前的 ...

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

    WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> ...

  3. C#微信公众号开发-高级接口-之模板消息开发,附源码

    个人觉得模板消息功能的增加对公众号的作用非常大,可以说是真正意义上的实现了所谓的轻app,商家可以通过模板消息给用户发送重要的信息,交易.预约.消费.邮件.物流等信息.之前我做过的系统通过邮件发送订单 ...

  4. Redrain 通用菜单控件使用方法和说明(附源码和demo)

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42889709 大概半年前我写过博客说明怎么改造duilib的原代Menu ...

  5. php的字符转换 & php登入注册界面设计以及源码 & 分离公共部分

    我们在编写的时候总是会出现乱码 https://www.cnblogs.com/mafeng/p/5827215.html php登入注册界面设计以及源码 https://blog.csdn.net/ ...

  6. 一点公益二码公益开发模式系统源码App

    写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通 ...

  7. android简洁饼状图组件、圆形Menu菜单、画板画笔应用、答题应用等源码

    Android精选源码 android自动监听复制内容源码 Android上简洁轻量级的饼图控件 好看的 Android 圆形 Menu 菜单效果 android画笔.画板功能效果的实现 Androi ...

  8. tornado高效开发必备之源码详解

    前言:本博文重在tornado源码剖析,相信读者读完此文能够更加深入的了解tornado的运行机制,从而更加高效的使用tornado框架. 本文参考武sir博客地址:http://www.cnblog ...

  9. 移动web app开发必备 - Deferred 源码分析

    姊妹篇  移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...

随机推荐

  1. Github概念理解备忘录

    总结: add就是用来建立跟踪,添加文件到缓存区: commit就是把文件缓存区的文件正式加到本地库中: push就是把本地库更新到远程库中: git命令的操作要在仓库所在目录下进行才有效: 在Git ...

  2. 区间DP的学习(持续更新)

    例题: 1.Multiplication Puzzle 原题地址:http://poj.org/problem?id=1651 2.Dire Wolf 原题地址:http://acm.split.hd ...

  3. 认识python正则模块re

    python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...

  4. php-redis 模块 文档

    直接从这位朋友转载过来. 地址 Redis::__construct构造函数$redis = new Redis(); connect, open 链接redis服务参数host: string,服务 ...

  5. GitBook入门(用github做出第一本书)——超详细配图说明

    我最近接触到gitbook,发现它支持markdown和git,刚好把我之前在github上的笔记可以生成一本书,于是我就开始着手捣鼓gitbook,一下午的时间就弄的差不多了,说明这个东西还是挺容易 ...

  6. PHP之string

    string addcslashes() Quote string with slashes in a C style 以 C 语言风格使用反斜线转义字符串中的字符 addslashes() Quot ...

  7. java 初始化顺序问题

    今天在<thinking in java>上面看了关于初始化问题,之前从来都没有深入考虑过,这次算是把它搞明白了,所以记录一下: 这个不是我看到的初始化顺序问题,在网上搜索的时候发现的,感 ...

  8. 基于angular2+ 的 http服务封装

    1.定义http-interceptor.service.ts服务,统一处理http请求 /** * name:http服务 * describe:对http请求做统一处理 * author:Angu ...

  9. 【angular5项目积累总结】列表多选样式框(2)

    view code list.css :host { display: flex; width: 100%; border-left: 1px solid #ccc; font: normal 12p ...

  10. 文本框改变之onpropertychange事件

    onpropertychange能够捕获每次输入值的变化. 例如:对象的value值被改变时,onpropertychange能够捕获每次改变,而onchange需要执行某个事件才可以捕获. 在文本框 ...