Android利用属性动画实现优酷菜单

利用属性动画实现优酷菜单,供大家参考,具体内容如下

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<RelativeLayout
 android:layout_width="280dip"
 android:layout_height="140dip"
 android:layout_alignParentBottom="true"
 android:layout_centerHorizontal="true"
 android:id="@+id/level3"
 android:background="@drawable/level3" >

 <ImageButton
 android:id="@+id/c1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_marginBottom="6dip"
 android:layout_marginLeft="12dip"
 android:background="@drawable/channel1" />

 <ImageButton
 android:id="@+id/c2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_above="@id/c1"
 android:layout_marginBottom="12dip"
 android:layout_marginLeft="28dip"
 android:background="@drawable/channel2" />

 <ImageButton
 android:id="@+id/c3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_above="@id/c2"
 android:layout_marginBottom="6dip"
 android:layout_marginLeft="8dip"
 android:layout_toRightOf="@id/c2"
 android:background="@drawable/channel3" />

 <ImageButton
 android:id="@+id/c4"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerHorizontal="true"
 android:layout_margin="6dip"
 android:background="@drawable/channel4" />

 <ImageButton
 android:id="@+id/c5"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_above="@+id/c6"
 android:layout_marginBottom="6dip"
 android:layout_marginRight="8dip"
 android:layout_toLeftOf="@+id/c6"
 android:background="@drawable/channel5" />

 <ImageButton
 android:id="@+id/c6"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_above="@+id/c7"
 android:layout_marginBottom="12dip"
 android:layout_marginRight="28dip"
 android:layout_alignParentRight="true"
 android:background="@drawable/channel6" />

 <ImageButton
 android:id="@+id/c7"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_marginBottom="6dip"
 android:layout_marginRight="12dip"
 android:layout_alignParentRight="true"
 android:background="@drawable/channel7" />
</RelativeLayout>

<RelativeLayout
 android:layout_width="180dip"
 android:layout_height="90dip"
 android:layout_alignParentBottom="true"
 android:layout_centerHorizontal="true"
 android:id="@+id/level2"
 android:background="@drawable/level2" >

 <ImageButton
 android:id="@+id/search"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_margin="10dip"
 android:background="@drawable/icon_search" />

 <ImageButton
 android:id="@+id/menu"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerHorizontal="true"
 android:layout_margin="6dip"
 android:background="@drawable/icon_menu" />

 <ImageButton
 android:id="@+id/myyouku"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:layout_alignParentRight="true"
 android:layout_margin="10dip"
 android:background="@drawable/icon_myyouku" />
</RelativeLayout>

<RelativeLayout
 android:layout_width="100dip"
 android:layout_height="50dip"
 android:layout_alignParentBottom="true"
 android:layout_centerHorizontal="true"
 android:background="@drawable/level1" >

 <ImageButton
 android:id="@+id/home"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_centerInParent="true"
 android:background="@drawable/icon_home" />
</RelativeLayout>

</RelativeLayout>

核心代码

package com.example.uumusic.menu;

import android.content.Context;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.example.uumusic.R;
import com.example.uumusic.fragment.base.BasePager;
import com.example.uumusic.utils.Tools;

import butterknife.ButterKnife;
import butterknife.InjectView;

/**
 * Created by Administrator on 2017.06.07.0007.
 */

public class YoukuMenu extends BasePager {

@InjectView(R.id.c1)
ImageButton c1;
@InjectView(R.id.c2)
ImageButton c2;
@InjectView(R.id.c3)
ImageButton c3;
@InjectView(R.id.c4)
ImageButton c4;
@InjectView(R.id.c5)
ImageButton c5;
@InjectView(R.id.c6)
ImageButton c6;
@InjectView(R.id.c7)
ImageButton c7;
@InjectView(R.id.level3)
RelativeLayout level3;
@InjectView(R.id.search)
ImageButton search;
@InjectView(R.id.menu)
ImageButton menu;
@InjectView(R.id.myyouku)
ImageButton myyouku;
@InjectView(R.id.level2)
RelativeLayout level2;
@InjectView(R.id.home)
ImageButton home;
private boolean isLeve12 = true;
private boolean isLeve13 = true;

public YoukuMenu(Context context) {
 super(context);
}

@Override
public View initView() {
 View view = View.inflate(mContext, R.layout.fragment_youku, null);
 ButterKnife.inject(this,view);
 return view;
}

@Override
public void initData() {
 //为按钮设置点击事件
 home.setOnClickListener(new MyOnClickLisetner());
 menu.setOnClickListener(new MyOnClickLisetner());

}

class MyOnClickLisetner implements View.OnClickListener{

 @Override
 public void onClick(View v) {
 switch (v.getId()){
  case R.id.home:
  //当点击home按钮时,开始进行动画的效果
  if (isLeve12){
   isLeve12 = false;
   Tools.hide(level2);
   if (isLeve13){
   isLeve13 = false;
   Tools.hide(level3,200);
   }
  }else {
   isLeve12 = true;
   Tools.show(level2);
  }
  break;
  case R.id.menu:

  if (isLeve13){
   isLeve13 = false;
   Tools.hide(level3);
  }else {
   isLeve13 = true;
   Tools.show(level3);
  }
  break;
 }
 }
}
}

动画工具类

package com.example.uumusic.utils;

import android.animation.ObjectAnimator;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.RotateAnimation;
import android.widget.RelativeLayout;

/**
 * Created by Administrator on 2017.06.07.0007.
 */
public class Tools {

//隐藏布局
public static void hide(ViewGroup view) {
 hide(view, 0);
}

//显示布局
public static void show(ViewGroup view) {

 //使用属性动画实现菜单的旋转
 ObjectAnimator animator = ObjectAnimator.ofFloat(view,"rotation",180,360);
 //设置动画时长
 animator.setDuration(300);
 animator.start();
 view.setPivotX(view.getWidth()/2);
 view.setPivotY(view.getHeight());
}

//延迟隐藏
public static void hide(ViewGroup view, int i) {
 ObjectAnimator animator = ObjectAnimator.ofFloat(view,"rotation",0,180);
 //设置动画时长
 animator.setDuration(300);
 //设置延迟
 animator.setStartDelay(i);
 animator.start();
 view.setPivotX(view.getWidth()/2);
 view.setPivotY(view.getHeight());
}
}

源码:Android利用属性动画实现优酷菜单

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 带有弹出收缩动画的扇形菜单实例

    最近试着做了个Android 带有弹出收缩动画的扇形菜单,留个笔记记录一下. 效果如下 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private ImageView imgPublish; private TextView textView1; private TextView textView2; private boolean isMenuOpen = false

  • Android仿优酷圆形菜单学习笔记分享

    先来看看效果: 首先来分析一下: 这个菜单可以分成三个菜单: 1.一级菜单(即最内圈那个菜单) 2.二级菜单(即中间圈那个菜单) 3.三级菜单(即最外圈那个菜单) 首先,可以将这三个菜单使用相对布局 一级菜单只有一个按钮(即home),可以控制二级和三级菜单 二级菜单有三个按钮(即menu),中间那个按钮可以控制三级菜单 三级菜单有七个按钮 那先把布局文件先写出来,采用三个相对布局(即每个菜单采用一个相对布局) <RelativeLayout xmlns:android="http://s

  • Android菜单(动画菜单、360波纹菜单)

    前言:Android菜单常用集合:FragmentTabHost系统菜单.上移式菜单.360波纹菜单.展开式菜单.详解注释,可直接拿来用! 效果: 开发环境:AndroidStudio2.1.2 部分代码(Activity) public class NormalActivity extends AppCompatActivity { private FragmentTabHost mTabHost; private String[] mTabTitle = new String[]{"首页&q

  • Android程序开发之使用Design包实现QQ动画侧滑效果和滑动菜单导航

    Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个support库里面,Google给我们提供了更加规范的MD设计风格的控件.最重要的是,Android Design Support Library的兼容性更广,直接可以向下兼容到Android 2.2.这不得不说是一个良心之作. 使用方法很简单,只需要添加一句依赖 compile 'com.android

  • Android编程实现仿优酷圆盘旋转菜单效果的方法详解【附demo源码下载】

    本文实例讲述了Android编程实现仿优酷圆盘旋转菜单效果的方法.分享给大家供大家参考,具体如下: 目前,用户对安卓应用程序的UI设计要求越来越高,因此,掌握一些新颖的设计很有必要. 比如菜单,传统的菜单已经不能满足用户的需求. 其中优酷中圆盘旋转菜单的实现就比较优秀,这里我提供下我的思路及实现,仅供参考. 该菜单共分里外三层导航菜单.可以依次从外向里关闭三层菜单,也可以反向打开,并且伴有圆盘旋转的动画效果 首先,看下效果: 以下是具体的代码及解释: 1. 菜单布局文件: 大家看到主要有三个Ra

  • Android自定义控件之仿优酷菜单

    去年的优酷HD版有过这样一种菜单,如下图: 应用打开之后,先是三个弧形的三级菜单,点击实体键menu之后,这三个菜单依次旋转退出,再点击实体键menu之后,一级菜单会旋转进入,点击一级菜单,二级菜单旋转进入,点击二级菜单的menu键,三级菜单旋转进入,再次点击二级菜单的旋转键,三级菜单又会旋转退出,这时再点击一级菜单,二级菜单退出,最后点击实体menu键,一级菜单退出. 总体来说实现这样的功能: (1)点击实体menu键时,如果界面上有菜单显示,不管有几个,全部依次退出,如果界面上没有菜单显示,

  • Android编程实现仿优酷旋转菜单效果(附demo源码)

    本文实例讲述了Android编程实现仿优酷旋转菜单效果.分享给大家供大家参考,具体如下: 首先,看下效果: 不好意思,不会制作动态图片,只好上传静态的了,如果谁会,请教教我吧. 首先,看下xml文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" a

  • Android实现360手机助手底部的动画菜单

    首先来看下我们实现的效果和360效果的对比: 360手机助手效果演示 本库实现的效果(Icon来自360手机助手,侵删) xml布局文件 注:为了美观,讲每个Button的高度以及固定,设置wrap_content时候是最大高度,为50dp,如果需要设置特定高度请参见下文的方法表格 <com.brioal.bottomtab.view.BottomLayout android:id="@+id/main_tab" android:layout_width="match_

  • Android利用属性动画实现优酷菜单

    利用属性动画实现优酷菜单,供大家参考,具体内容如下 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_p

  • Android使用属性动画如何自定义倒计时控件详解

    为什么要引入属性动画? Android之前的补间动画机制其实还算是比较健全的,在android.view.animation包下面有好多的类可以供我们操作,来完成一系列的动画效果,比如说对View进行移动.缩放.旋转和淡入淡出,并且我们还可以借助AnimationSet来将这些动画效果组合起来使用,除此之外还可以通过配置Interpolator来控制动画的播放速度等等等等.那么这里大家可能要产生疑问了,既然之前的动画机制已经这么健全了,为什么还要引入属性动画呢? 其实上面所谓的健全都是相对的,如

  • Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】

    本文实例讲述了Android开发实现高仿优酷的客户端图片左右滑动切换功能.分享给大家供大家参考,具体如下: 本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能使用ViewPager控件. 2. 图片的自动切换: 可使用Timer或者ScheduledExecutorService,这个有多重方式可以实现. 同时要切换底部的dots(园点) 3.Ha

  • Android属性动画实现炫酷的登录界面

    我们聊聊我们常写的登录界面,这个界面我相信很多人都写过,而且也没什么难度,但是如果要实现比较不一般的效果,那就要花点心思了,先看看项目的效果吧: 我一直都不知道怎么在编辑框连设置图片大小,所以这个图不怎么样适配编辑框了,大家先凑合着看看. 我先讲讲思路,当我们输入完账号跟密码之后,点击登录,那这个输入框就慢慢的消失,在消失后,紧接着就出现这个进度的界面. 思路有了,那我们就开始编码了: 新建一个项目,然后系统生成了一个MainActivity.java文件和activity_main.xml文件

  • Android利用Canvas标点画线并加入位移动画(2)

    本文实例为大家分享了Android利用Canvas标点画线,并加入位移动画的具体代码,供大家参考,具体内容如下 1.背景 继上次公司需求实现Canvas面板标记点,画折现,并利用属性动画进行沿线移动之后,又有了新问题. 发现公司提供的坐标有正值有负值,并且值很大,很容易超出屏幕范围,而且由于我们Canvas坐标方向与正常坐标系不符合,由此发现做的图方向也不对. 2.问题 Canvas坐标系位于屏幕左上角,且Y正向坐标向下,如何转换? 由于坐标有正有负,而Canvas默认只显示正方向,如何解决显示

  • Android源码解析之属性动画详解

    前言 大家在日常开发中离不开动画,属性动画更为强大,我们不仅要知道如何使用,更要知道他的原理.这样,才能得心应手.那么,今天,就从最简单的来说,了解下属性动画的原理. ObjectAnimator .ofInt(mView,"width",100,500) .setDuration(1000) .start(); ObjectAnimator#ofInt 以这个为例,代码如下. public static ObjectAnimator ofInt(Object target, Stri

随机推荐