优酷旋转菜单(RotateAnimation,Relativelayout知识点学习)

来源:互联网 发布:手机淘宝宝贝无线连接 编辑:程序博客网 时间:2024/05/18 18:15

RotateAnimation:旋转动画,创建该动画时只要指定动画开始时的旋转角度、结束角度和旋转角度,并指定动画持续时间。由于旋转的时候有中心点的,所以还要指定中心点的坐标

观看传智播客的视频,有一个关于优酷动态menu的比较感兴趣,就试着跟着视频做了下

点击home菜单上面两级菜单可以旋转隐藏,点击二级菜单键可以旋转最上层菜单,点击手机上的菜单键可以隐藏所有菜单

动画效果看起来很炫,菜单布局看起来布局很麻烦,其实不然,这种菜单只能用相对布局或者帧布局来布局

这里我使用相对布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

        <Button
            android:id="@+id/btn_home"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_centerInParent="true"
            android:background="@drawable/icon_home" />
    </RelativeLayout>

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

        <Button
            android:id="@+id/btn_search"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="5dp"
            android:background="@drawable/icon_search" />

        <Button
            android:id="@+id/btn_menu"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/icon_menu" />

        <Button
            android:id="@+id/btn_myyouku"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="5dp"
            android:background="@drawable/icon_myyouku" />
    </RelativeLayout>

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

        <Button
            android:id="@+id/btn_channel1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="4dp"
            android:background="@drawable/channel1" />

        <Button
            android:id="@+id/btn_channel2"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_above="@id/btn_channel1"
            android:layout_alignLeft="@id/btn_channel1"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="22dp"
            android:background="@drawable/channel2" />

        <Button
            android:id="@+id/btn_channel3"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_above="@+id/btn_channel2"
            android:layout_toRightOf="@+id/btn_channel2"
            android:background="@drawable/channel3" />

        <Button
            android:id="@+id/btn_channel4"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/channel4" />
         <Button
            android:id="@+id/btn_channel5"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="4dp"
            android:background="@drawable/channel5" />

        <Button
            android:id="@+id/btn_channel6"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_above="@id/btn_channel5"
            android:layout_alignRight="@id/btn_channel5"
            android:layout_marginBottom="8dp"
            android:layout_marginRight="22dp"
            android:background="@drawable/channel6" />

        <Button
            android:id="@+id/btn_channel7"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_above="@+id/btn_channel6"
            android:layout_toLeftOf="@+id/btn_channel6"
            android:background="@drawable/channel7" />
    </RelativeLayout>

</RelativeLayout>

代码控制菜单旋转效果

MainActivity:

package youku;

import com.example.youku.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements OnClickListener {

 private Button btn_home;
 private Button btn_menu;
 Boolean is_level1=true;
    Boolean is_level2=true;
    Boolean is_level3=true;
 private RelativeLayout level2;
 private RelativeLayout level1;
 private RelativeLayout level3;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  btn_home = (Button) findViewById(R.id.btn_home);
  btn_menu = (Button) findViewById(R.id.btn_menu);
  btn_home.setOnClickListener(this);
  btn_menu.setOnClickListener(this);
  
  level1 = (RelativeLayout) this.findViewById(R.id.level1);
  level2 = (RelativeLayout) this.findViewById(R.id.level2);
  level3 = (RelativeLayout) this.findViewById(R.id.level3);
 }

 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  switch (v.getId()) {
  case R.id.btn_home:
            if(is_level2){
             MyUtils.startAnimOut(level2);
             if(is_level3){
              MyUtils.startAnimOut(level3);
             }
             is_level2=false;
             is_level3=false;
            }else{
             MyUtils.startAnimIn(level2);
             
             is_level2=true;
            }
   break;

  case R.id.btn_menu:
   if(is_level3){
    MyUtils.startAnimOut(level3);
    is_level3=false;
   }else{
    MyUtils.startAnimIn(level3);
    is_level3=true;
   }
   break;
  default:
   break;
  }
 }
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {

  if(keyCode==KeyEvent.KEYCODE_MENU){
   changelevel1state();
  }
  return super.onKeyDown(keyCode, event);
 }

 private void changelevel1state() {
  // TODO Auto-generated method stub
     if(is_level1){
      if(is_level2){
       MyUtils.startAnimOut(level2);
       is_level2=false;
      }
      if(is_level3){
       MyUtils.startAnimOut(level3);
       is_level2=false;
      }
      MyUtils.startAnimOut(level1);
      is_level1=false;
     }else{
      MyUtils.startAnimIn(level1);
      is_level1=true;
     }
 }
}

菜单旋转效果:本质上就是一个动画,将一个view旋转    (RotateAnimation)

MyUtils:

package youku;

import android.view.animation.RotateAnimation;
import android.widget.RelativeLayout;

public class MyUtils {

 public static void startAnimOut(RelativeLayout view) {

  RotateAnimation rotateAnimation=new RotateAnimation(0, 180, view.getWidth()/2, view.getHeight());
  rotateAnimation.setDuration(500);
  rotateAnimation.setFillAfter(true);
  view.startAnimation(rotateAnimation);
 }

 public static void startAnimIn(RelativeLayout view) {
  RotateAnimation rotateAnimation=new RotateAnimation(180, 360, view.getWidth()/2, view.getHeight());
  rotateAnimation.setDuration(500);
  rotateAnimation.setFillAfter(true);
  view.startAnimation(rotateAnimation);
  
 }

}

 

 

代码源码

http://pan.baidu.com/s/1gduAJ4Z

 

0 0
原创粉丝点击