浅谈属性动画简单使用之实现卫星菜单(二)
2017-07-27 19:45
387 查看
大家对于卫星菜单应该都不陌生了,事实上这个菜单假设能合适运用到我们的APP项目中。确实是一个不错的选择,交互性非常好。
在写Demo之前我也上网搜了一些关于卫星菜单的实现,感觉好多人实现卫星菜单这样的动画,採用的是补间动画。而且代码还不少,通过上一讲我们知道,补间动画不具备与用户交互的特点,就比方卫星菜单展开后,产生非常多子菜单有非常多的点击事件,会发现产生点击事件的位置不会随着补间动画而产生位置改变而改变。反而点击事件一直保存在初始的位置。
当然补间动画也能做。那就须要产生动画后发生位置的改变,而且也须要将点击事件触发的位置随着动画改变而改变。这样实现起来,可能非常麻烦。今天我给大家带来的是用属性动画来实现卫星菜单,用了后你会发现。核心代码只100行左右就能完毕。而且能够利用属性动画的特点,它具备与用户交互的特点。它的点击事件触发位置,会随着动画的位置改变而改变。说白了属性动画实质就是修修改画的属性,而补间动画则是不断调用draw()方法不断重绘来达到一种动画的效果。
实现卫星菜单的第一步:
分析一下,这样卫星菜单怎么实现?实现该菜单对布局有什么要求?
首先,来分析一下布局。布局应该是这种,肯定有一个button。而且其它的子菜单都是重叠在第一个可见button以下,其它的子菜单都是不可见的。当点击最上面的一个button时,其它子菜单则呈1/4的圆弧显示,当再次点击,将这些button又一次回到原来的位置,隐藏起来。
所以这样布局大家应该想到了什么布局吧,我们应该使用帧布局(FrameLayout),将几个ImageView重叠在一起,而且让第一个显示的button放在最后,这样就会第一个显示了。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/index2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/b" />
<ImageView
android:id="@+id/index3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/c" />
<ImageView
android:id="@+id/index4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/d" />
<ImageView
android:id="@+id/index5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/e" />
<ImageView
android:id="@+id/index6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/f" />
<ImageView
android:id="@+id/index7"
android:layout_width="wrap_content"
android:layout_height=&q
在写Demo之前我也上网搜了一些关于卫星菜单的实现,感觉好多人实现卫星菜单这样的动画,採用的是补间动画。而且代码还不少,通过上一讲我们知道,补间动画不具备与用户交互的特点,就比方卫星菜单展开后,产生非常多子菜单有非常多的点击事件,会发现产生点击事件的位置不会随着补间动画而产生位置改变而改变。反而点击事件一直保存在初始的位置。
当然补间动画也能做。那就须要产生动画后发生位置的改变,而且也须要将点击事件触发的位置随着动画改变而改变。这样实现起来,可能非常麻烦。今天我给大家带来的是用属性动画来实现卫星菜单,用了后你会发现。核心代码只100行左右就能完毕。而且能够利用属性动画的特点,它具备与用户交互的特点。它的点击事件触发位置,会随着动画的位置改变而改变。说白了属性动画实质就是修修改画的属性,而补间动画则是不断调用draw()方法不断重绘来达到一种动画的效果。
实现卫星菜单的第一步:
分析一下,这样卫星菜单怎么实现?实现该菜单对布局有什么要求?
首先,来分析一下布局。布局应该是这种,肯定有一个button。而且其它的子菜单都是重叠在第一个可见button以下,其它的子菜单都是不可见的。当点击最上面的一个button时,其它子菜单则呈1/4的圆弧显示,当再次点击,将这些button又一次回到原来的位置,隐藏起来。
所以这样布局大家应该想到了什么布局吧,我们应该使用帧布局(FrameLayout),将几个ImageView重叠在一起,而且让第一个显示的button放在最后,这样就会第一个显示了。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/index2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/b" />
<ImageView
android:id="@+id/index3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/c" />
<ImageView
android:id="@+id/index4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/d" />
<ImageView
android:id="@+id/index5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/e" />
<ImageView
android:id="@+id/index6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:src="@drawable/f" />
<ImageView
android:id="@+id/index7"
android:layout_width="wrap_content"
android:layout_height=&q
相关文章推荐
- 浅谈属性动画简单使用之实现卫星菜单(二)
- 浅谈属性动画简单使用之实现爱的贝塞尔曲线浪漫告白效果(三)
- 浅谈属性动画简单使用之实现爱的贝塞尔曲线浪漫告白效果(三)
- Android使用属性动画,实现分散式弹出菜单
- Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单
- 属性动画实现卫星菜单效果
- Android属性动画应用超简单代码打造酷炫扇形(卫星),圆形菜单
- Android使用属性动画property animation,实现分散式弹出菜单
- 使用属性动画实现一个简单的加载动画
- 浅谈属性动画的简单使用(一)
- 属性动画实现卫星菜单
- DrawerLayout抽屉布局的使用 最简单的侧滑菜单实现
- 绘图与动画之使用自定义属性与图像掩膜实现灯泡开关动画
- IOS动画的使用方法总结-下拉框的简单实现
- android 利用属性动画实现酷炫的圆形菜单
- 一款二级菜单和使用自定义标签实现简单权限控制
- CABasicAnimation(基础属性动画)的简单使用
- 绘图与动画之使用自定义属性与颜色渐变实现色带加载动画
- 冒泡动画按钮的简单实现(使用CSS3)
- Android 使用属性动画实现可折叠布局