弧形菜单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. 【算法笔记】A1047 Student List for Course

    https://pintia.cn/problem-sets/994805342720868352/problems/994805433955368960 题意 给出每个学生的选课情况,输出每节课选课 ...

  2. CF1139D Steps to One 题解【莫比乌斯反演】【枚举】【DP】

    反演套 DP 的好题(不用反演貌似也能做 Description Vivek initially has an empty array \(a\) and some integer constant ...

  3. Monkey and Banana

    Monkey and BananaTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. CPU飚高问题排查基本步骤

    CPU 飚高 一般是死循环或者死锁问题导致. 1. 通过 top  命令找到 CPU 消耗最高的进程,并记住进程 ID {pid}.top -M -n 2 -d 3 >{pid}/top.txt ...

  5. Mac 10.12安装Command+Q误按提示工具

    说明:很多时候不小心会按强制关闭而无任何提示,这款工具能延迟关闭,并有相应的提示. 下载: (链接: https://pan.baidu.com/s/1bpyJMPL 密码: bqn1)

  6. 在windows上部署使用Redis--资料整理

    声明:一下只是针对windows系统,其他系统资料需自己补全. 很简单:下载.安装.安装桌面管理工具.测试.细不具表,下面几个网址应该足以解决你的所有问题. 网址访问专用Host: http://pa ...

  7. Types方法之isSameType-isSuperType-isSubType

    4.isSameType() 方法 /** * Is t the same type as s? */ public boolean isSameType(Type t, Type s) { retu ...

  8. Oracle 汉字转拼音触发器

    --函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...

  9. linux 安装jdk 二进制版本,非安装版

    0.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对 ...

  10. 饶军:Apache Kafka的过去,现在,和未来

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 大家好,我大概简单的介绍一下,我叫饶军,我是硅谷的初创公司Confluent的联合创始人之一,我们公 ...