获取房子,菜单图标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] 优酷环形菜单-旋转动画的更多相关文章

  1. [android] 优酷环形菜单-相对布局练习

    优酷环形菜单 布局文件,使用<RelativeLayout/>控件作为第一级菜单,相对布局,位于父控件的底部,水平居中,因为图片不是特别的标准,因此宽度和高度都钉死,宽度是高度的两倍 二次 ...

  2. android一个弹出菜单的动画(一)

    先上效果图: 先写Layout文件: <?xml version="1.0" encoding="utf-8"? > <RelativeLay ...

  3. android一个弹出菜单的动画(二)

    假设做一个弹出的控件,我们能够进行加入view: 写class SatelliteMenu extends FrameLayout private void init(Context context, ...

  4. 17.1拓展之纯 CSS 创作炫酷的同心圆旋转动画

    效果地址:https://codepen.io/flyingliao/pen/ebjEMm?editors=1100 HTML代码: <div class="loader"& ...

  5. Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)

    本文主要介绍Android立体旋转动画,或者3D旋转,下图是我自己实现的一个界面 立体旋转分为以下三种: 1. 以X轴为轴心旋转 2. 以Y轴为轴心旋转 3. 以Z轴为轴心旋转--这种等价于andro ...

  6. android xml实现animation 4种动画效果

    animation有四种动画类型 分别为alpha(透明的渐变).rotate(旋转).scale(尺寸伸缩).translate(移动),二实现的分发有两种,一种是javaCode,另外一种是XML ...

  7. Android自己定义控件系列一:Android怎样实现老版优酷client三级环形菜单

    转载请附上本文链接:http://blog.csdn.net/cyp331203/article/details/40423727 先来看看效果: 一眼看上去好像还挺炫的,感觉比較复杂...实际上并不 ...

  8. Android自定义控件3--优酷菜单执行动画

    在上篇文章中实现了优酷菜单的布局,本文接着实现动画功能 本文地址:http://www.cnblogs.com/wuyudong/p/5914901.html,转载请注明源地址. 新建动画工具类Ani ...

  9. android自定义控件之模仿优酷菜单

    去年的优酷HD版有过这样一种菜单,如下图: 应用打开之后,先是三个弧形的三级菜单,点击实体键menu之后,这三个菜单依次旋转退出,再点击实体键menu之后,一级菜单会旋转进入,点击一级菜单,二级菜单旋 ...

随机推荐

  1. MacOS统计TCP/UDP端口号与对应服务

    1.TCP端口 echo "### TCP LISTEN ###" lsof -nP -iTCP -sTCP:LISTEN 2.UDP端口 echo "### UDP L ...

  2. 迁移桌面程序到MS Store(6)——.NET Portability Analyzer

    上一篇我们简单介绍了.NET Standard,本篇我们来实践.NET Framework 4.5 Class Library到.NET Standard 2.0的转换.        首先让我们来做 ...

  3. ionic3.x angular4.x ng4.x 自定义组件component双向绑定之自定义计数器

    本文主要示例在ionic3.x环境下实现一个自定义计数器,实现后最终效果如图: 1.使用命令创建一个component ionic g component CounterInput 类似的命令还有: ...

  4. C#6.0语言规范(十六) 异常

    C#中的异常提供了一种结构化,统一且类型安全的方法来处理系统级和应用程序级错误条件.C#中的异常机制与C ++的异常机制非常相似,但有一些重要的区别: 在C#中,所有异常必须由派生自的类类型的实例表示 ...

  5. 设计模式《JAVA与模式》之责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

  6. vue中封装公共方法,全局使用

    1.以封装的合并单元格为例,首先建立一个util.js 2.在main.js中引用 3.直接在使用该方法的地方调用就可以了

  7. 关于使用 IDEA Spring Boot 热部署

    1,POM 中引用 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  8. 判断一个类是否为另一个类的实例 instanceof关键字和isAssignableFrom方法的区别

    Which of the following is better? a instanceof B or B.class.isAssignableFrom(a.getClass()) The only ...

  9. One difference between AngularJS' $location and window.location

    Recenently, I encountered a problem. Client side code is: $http({ url: "/api/runtimelicense&quo ...

  10. ASP.NET状态管理的总结

    阅读目录 开始 hidden-input QueryString Cookie ApplicationState ViewState,ControlState Session Profile 各种状态 ...