弧形菜单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. 【笔记】AJAX基础

    [笔记]AJAX基础 Django AJAX  知识储备:JSON 什么是 JSON JSON 是轻量级的文本数据交换格式 JSON 独立于语言和平台.JSON 解析器和 JSON 库支持许多不同的编 ...

  2. Vue局部注册 或者全局注册 组件时,组件定义要用 分隔命名,用驼峰命名是不生效的

    Vue.component('all-canuse',{ props:['message'], template:'<div>{{message}}</div>' }) 像这样

  3. mysql数据库使用脚本实现分库备份过程

    一条命令解决分库分表备份: [root@db01 data]# mysql -uroot -p123456 -e "show databases;"|egrep -v " ...

  4. Mac下安装eclipse(Mac 10.12/JDK/tomcat)

    1.到官网https://www.eclipse.org/downloads/eclipse-packages/下载安装包 2.安装 注意:安装ecllipse时一定要安装JDK先,最新版本的ecli ...

  5. 开源:我的Android新闻客户端,速度快、体积小、支持离线阅读、操作简便、内容展现形式丰富多样、信息量大、功能全面 等(要代码的留下邮箱)

    分享:我的Android新闻客户端,速度快.体积小.支持离线阅读.操作简便.内容展现形式丰富多样.信息量大.功能全面 等(要代码的留下邮箱) 历时30天我为了开发这个新闻客户端APP,以下简称觅闻 h ...

  6. (转)GlusterFS 01 理论基础,企业实战,故障处理

    https://jaminzhang.github.io/glusterfs/GlusterFS-01-Theory-Basis/--------GlusterFS 01 理论基础 https://j ...

  7. javascript中Function与Object

    1. 先来一段代码: console.log(Function); // function Function() { [native code] } console.log(Object); // f ...

  8. Spring框架的设计理念

    它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定 ...

  9. Gradle中的SourceSet理解

    对于maven项目来说,目录结构是固定的,也就是像这样: src/main/ src/main/java/ src/main/resources/ src/test/ src/test/java/ s ...

  10. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...