获取房子,菜单图标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. Ef-Code-First 使用实体类映射出数据库

    最近面试时很多面试官都问到了EF框架 好记性不如烂笔头 赶紧记下来 code-first是EF框架中的一种,是使用实体类来进行数据库表的映射,所以实体类中的字段要规范(我认为) 比如: 如果有外键的话 ...

  2. uwp 用win2d获取图片主调颜色

    win10在设置颜色里有个从“背景图片中选取一种主题颜色”的选项,还有在很多内容展示软件中都使用了这样的功能. 现在我们需要在 nuget 引用 win2d.uwp 和 Toolkit.uwp 两个库 ...

  3. [C++基础]队列<queue>中的常用函数

    在C++中只要#include<queue>即可使用队列类,其中在面试或笔试中常用的成员函数如下(按照最常用到不常用的顺序) 1. push 2. pop 3. size 4. empty ...

  4. 浅谈react受控组件与非受控组件

    引言 最近在使用蚂蚁金服出品的一条基于react的ant-design UI组件时遇到一个问题,编辑页面时input输入框会展示保存前的数据,但是是用defaultValue就是不起作用,输入框始终为 ...

  5. Python 常用的内置函数

    1. str.isdigit( ) 作用:检测字符串是否有数字组成 2. strip( ) 作用:除去首尾指定的字符,包括空格,换行符,不能除去中间的字符 3. slice( ) 作用:以指定参数切割 ...

  6. Fusioncharts的数字格式化

      1.     小数点位数格式化 <chart ... decimals='2' > Eg.数值12.432, 13.4 and 13,使用<chart ... decimals= ...

  7. 修改oracle默认监听端口

    修改oracle默认监听端口 oracle端口修改 主要是修改两个文件和修改oracle参数local_listener 1 查看当前监听状态 [oracle@test ~]$ lsnrctl sta ...

  8. FTP服务安装与端口说明

    FTP服务安装与端口说明 FTP端口修改安装部署windowswindows 2012文件服务 1. FTP服务介绍 1.1 什么是FTP FTP(File Transfer Protocol)是文件 ...

  9. [vue] [axios] 设置代理实现跨域时的纠错

    # 第一次做前端工程 # 记一个今天犯傻调查的问题 -------------------------------------------------------------------------- ...

  10. Ubuntu14.04 + Text-Detection-with-FRCN(CPU)

    操作系统: yt@yt-MS-:~$ cat /etc/issue Ubuntu LTS \n \l Python版本: yt@yt-MS-:~$ python --version Python pi ...