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