[android] 优酷环形菜单-旋转动画
获取房子,菜单图标ImageView对象,获取三个圆环RelativeLayout对象
给菜单图标(icon_menu)设置点击事件
定义一个成员变量isLevel3Show来存储第三级菜单是否显示
判断上面的变量,来显示隐藏第三级菜单,定义一个类实现动画效果
切换变量,isLevel3Show=!isLevel3Show
定义一个工具类MyUtils,实现旋转动画
定义一个startAnimOut()
获取RotateAnimation对象,旋转对象的默认中心是左上角,开始度数默认是水平向右为0度,顺时针转;构造函数:开始度数,结束度数,圆心x(宽度一半),圆心y(高度)
调用RotateAnimation对象的setDuration()方法,设置执行时间,参数:毫秒
调用RotateAnimation对象的setFillAfter()方法,设置执行完毕后保持状态,参数:布尔值
定义一个startAnimIn(),参数:RelativeLayout对象,延迟毫秒
和上面一样,度数不一样而已,从180度到360度
调用RotateAnimation对象的setStartOffset()方法,延迟播放
给房子图标(icon_home)设置点击事件
判断当二级菜单显示时,把它隐藏,并且当三级菜单也显示时,也要隐藏
当它隐藏时,让他显示
MainActivity.java
package com.tsh.myyouku; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.RelativeLayout; public class MainActivity extends Activity implements OnClickListener {
private ImageView icon_home;
private ImageView icon_menu;
private RelativeLayout level1;
private RelativeLayout level2;
private RelativeLayout level3; private boolean isLevel3Show=true;
private boolean isLevel2Show=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
icon_home=(ImageView) findViewById(R.id.icon_home);
icon_menu=(ImageView) findViewById(R.id.icon_menu);
level1=(RelativeLayout) findViewById(R.id.level1);
level2=(RelativeLayout) findViewById(R.id.level2);
level3=(RelativeLayout) findViewById(R.id.level3);
icon_menu.setOnClickListener(this);
icon_home.setOnClickListener(this);
}
//处理点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.icon_menu://菜单图标
if(isLevel3Show){
//隐藏
MyUtils.startAnimOut(level3,0);
}else{
//显示
MyUtils.startAnimIn(level3);
}
isLevel3Show=!isLevel3Show;
break;
case R.id.icon_home://菜单图标
if(isLevel2Show){
//隐藏
MyUtils.startAnimOut(level2,0);
if(isLevel3Show){
MyUtils.startAnimOut(level3,100);
isLevel3Show=false;
}
}else{
//显示
MyUtils.startAnimIn(level2);
}
isLevel2Show=!isLevel2Show;
break;
}
}
}
MyUtils.java
package com.tsh.myyouku; import android.view.animation.RotateAnimation;
import android.widget.RelativeLayout; public class MyUtils {
/**
* 旋转离开
* @param view
*/
public static void startAnimOut(RelativeLayout view,long times) {
RotateAnimation rotateAnimation=new RotateAnimation(0, 180, view.getWidth()/2, view.getHeight());
rotateAnimation.setDuration(1000);
rotateAnimation.setFillAfter(true);
rotateAnimation.setStartOffset(times);
view.startAnimation(rotateAnimation);
}
/**
* 旋转进入
* @param level3
*/
public static void startAnimIn(RelativeLayout view) {
RotateAnimation rotateAnimation=new RotateAnimation(180, 360, view.getWidth()/2, view.getHeight());
rotateAnimation.setDuration(1000);
rotateAnimation.setFillAfter(true);
view.startAnimation(rotateAnimation);
} }
[android] 优酷环形菜单-旋转动画的更多相关文章
- [android] 优酷环形菜单-相对布局练习
优酷环形菜单 布局文件,使用<RelativeLayout/>控件作为第一级菜单,相对布局,位于父控件的底部,水平居中,因为图片不是特别的标准,因此宽度和高度都钉死,宽度是高度的两倍 二次 ...
- android一个弹出菜单的动画(一)
先上效果图: 先写Layout文件: <?xml version="1.0" encoding="utf-8"? > <RelativeLay ...
- android一个弹出菜单的动画(二)
假设做一个弹出的控件,我们能够进行加入view: 写class SatelliteMenu extends FrameLayout private void init(Context context, ...
- 17.1拓展之纯 CSS 创作炫酷的同心圆旋转动画
效果地址:https://codepen.io/flyingliao/pen/ebjEMm?editors=1100 HTML代码: <div class="loader"& ...
- Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)
本文主要介绍Android立体旋转动画,或者3D旋转,下图是我自己实现的一个界面 立体旋转分为以下三种: 1. 以X轴为轴心旋转 2. 以Y轴为轴心旋转 3. 以Z轴为轴心旋转--这种等价于andro ...
- android xml实现animation 4种动画效果
animation有四种动画类型 分别为alpha(透明的渐变).rotate(旋转).scale(尺寸伸缩).translate(移动),二实现的分发有两种,一种是javaCode,另外一种是XML ...
- Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单
转载请附上本文链接:http://blog.csdn.net/cyp331203/article/details/40423727 先来看看效果: 一眼看上去好像还挺炫的,感觉比較复杂...实际上并不 ...
- Android自定义控件3--优酷菜单执行动画
在上篇文章中实现了优酷菜单的布局,本文接着实现动画功能 本文地址:http://www.cnblogs.com/wuyudong/p/5914901.html,转载请注明源地址. 新建动画工具类Ani ...
- android自定义控件之模仿优酷菜单
去年的优酷HD版有过这样一种菜单,如下图: 应用打开之后,先是三个弧形的三级菜单,点击实体键menu之后,这三个菜单依次旋转退出,再点击实体键menu之后,一级菜单会旋转进入,点击一级菜单,二级菜单旋 ...
随机推荐
- C#把汉字转换成16进制(HEX)并向串口发送数据
报警器实例:(有发送,无返回获取) using System; using System.Collections.Generic; using System.Linq; using System.Te ...
- java面试和笔试
1.Java中异常处理机制和事件机制. 2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java. ...
- 17_python_成员
一.类成员 1.字段 class Province: country = '中国' # 实例 (静态) 字段:类变量. 不属于对象, 对象可以访问 def __init__(self, name): ...
- js中获取当前页面的url
在js中可以通过下面的方式获取当前页面url的相关信息 var item = window.location // 返回的是对象, 这个对象里有各种关于url的信息 var url = window. ...
- PowerDesigner生成OOM时类名属性名转换
Examples Script 1: Convert a name into a class code (JAVA naming convention)转换类名 .foreach_part(%Name ...
- Java - Junit单元测试框架
简介 Junit : http://junit.org/ JUnit是一个开放源代码的Java语言单元测试框架,用于编写和运行可重复的测试. 多数Java的开发环境都已经集成了JUnit作为单元测试的 ...
- Vue.js项目引入less文件报错解决
解决方案: 需要局部安装vue-style-loader,less-loader,css-loader,vue-loader和less包(需注意就算全局安装以上包仍需局部安装) 即:npm i vue ...
- .NET平台常用框架
分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...
- 手把手教你整合最优雅SSM框架
我们看招聘信息的时候,经常会看到这一点,需要具备 SSM 框架的技能, SpringMVC 可以完全替代 Struts,配合注解的方式,编程非常快捷,而且通过 restful 风格定义 url,让地址 ...
- JavaScript -- FileSystemObject
-----056-FileSystemObject.html----- <!DOCTYPE html> <html> <head> <meta http-eq ...