弧形菜单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
}
}
弧形菜单2(动画渐入)Kotlin开发(附带java源码)的更多相关文章
- Android源码开发利器——Java源码调试(基于4.1.2)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 调试Android Java源码 草帽的后花园——Neo 写在之前的 ...
- WEB前端开发学习:源码canvas 雪
WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> ...
- C#微信公众号开发-高级接口-之模板消息开发,附源码
个人觉得模板消息功能的增加对公众号的作用非常大,可以说是真正意义上的实现了所谓的轻app,商家可以通过模板消息给用户发送重要的信息,交易.预约.消费.邮件.物流等信息.之前我做过的系统通过邮件发送订单 ...
- Redrain 通用菜单控件使用方法和说明(附源码和demo)
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42889709 大概半年前我写过博客说明怎么改造duilib的原代Menu ...
- php的字符转换 & php登入注册界面设计以及源码 & 分离公共部分
我们在编写的时候总是会出现乱码 https://www.cnblogs.com/mafeng/p/5827215.html php登入注册界面设计以及源码 https://blog.csdn.net/ ...
- 一点公益二码公益开发模式系统源码App
写这篇文章,是因为最近看到的一个著名的开源项目在内部使用时的各种问题,不得不说,很多的开源的东西思想是不错的,但离真正工程化都有不小的距离,所以没什么商业公司采用的开源产品如果要引入的话一定要慎重,通 ...
- android简洁饼状图组件、圆形Menu菜单、画板画笔应用、答题应用等源码
Android精选源码 android自动监听复制内容源码 Android上简洁轻量级的饼图控件 好看的 Android 圆形 Menu 菜单效果 android画笔.画板功能效果的实现 Androi ...
- tornado高效开发必备之源码详解
前言:本博文重在tornado源码剖析,相信读者读完此文能够更加深入的了解tornado的运行机制,从而更加高效的使用tornado框架. 本文参考武sir博客地址:http://www.cnblog ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
随机推荐
- 「Neerc2016」Expect to Wait
题目描述 ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况, 并且借书的过程类 似一个队列,每次有人来借书就将它加至队尾,每次有人来还书就把书借给队头的若干个人,定 ...
- webpack/gulp的z-index被改写
webpack方法 new OptimizeCSSPlugin({ cssProcessorOptions: { safe: true } }) gulp-cssnano 方法 .pipe(cssna ...
- 【转载】TableLayout表格布局详解
原文地址:http://www.cnblogs.com/manuosex/p/3584701.html 一.Tablelayout简介 Tablelayout类以行和列的形式对控件进行管理,每一行为一 ...
- hibernate多对多单向关联
多对多单向,一个学生可以有多个老师,一个老师也可以教多个学生.老师可以找到他的学生,学生找不到教他的老师. 老师类Teacher: package com.oracle.hibernate; impo ...
- 安装php readline扩展报错 Please reinstall libedit
现象:configure: error: Please reinstall libedit – I cannot find readline.h解决办法:安装 Editline Library (li ...
- Android的网络编程
1.3主要接口 Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别 ...
- 《LeetBook》leetcode题解(5):Longest Palindromic [M]——回文串判断
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- python 脚本备份 mysql 数据库到 OSS
脚本如下: #!/usr/bin/python ########################################################### ################ ...
- PHP之string之str_split()函数使用
str_split (PHP 5, PHP 7) str_split - Convert a string to an array str_split - 将字符串转换为数组 Description ...
- bind(0)
通配地址就是全0的地址,由内核随机选取