弧形菜单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之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
随机推荐
- 微信内置的浏览器window.location.href 跳转不兼容问题
1.不兼容苹果手机---->>>>使用模拟触发a标签 <a id="alink" href="http://www.baidu.com&qu ...
- JDK7 AutoCloseable
干嘛的 直接看JDK7的流(运用了AutoCloseable)源码 public abstract class InputStream implements Closeable { //实现Close ...
- 查看哪个用户、IP、什么时间登陆过服务器
2019-01-07 utmpdump /var/log/wtmp 或者 who /var/log/wtmp
- 三、OPENERP 中的对象关系类型
OE中的对象关系一共分四种,one2one,one2many,many2one,many2many.他们的意思分别是一对一,一对多,多对一以及多对多. 我们新建一个模块来测试这四种类型 1.one2o ...
- Linux快速查看某条命令的版本和存放的位置(ls -l `which mvn`)
输入: ls -l `which mvn` 如图:
- SPB 公开课记录
sql server 用工具到处mysql脚本,不过目前有点问题
- Ngin 简单配置文件
#user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...
- shiro学习笔记_0400_自定义realm实现身份认证
自定义Realm实现身份认证 先来看下Realm的类继承关系: Realm接口有三个方法,最重要的是第三个方法: a) String getName():返回此realm的名字 b) boolean ...
- Spring Security OAuth 2开发者指南译
Spring Security OAuth 2开发者指南译 介绍 这是用户指南的支持OAuth 2.0.对于OAuth 1.0,一切都是不同的,所以看到它的用户指南. 本用户指南分为两部分,第一部分为 ...
- git提交代码到远程仓库
1.仓库初始化 git init 2.连接仓库 git remote add origin 仓库地址 3.查看状态 git status 4.将文件添加到暂存区 git add 状态里的新文件 5.将 ...