优酷旋转菜单(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
- 优酷旋转菜单(RotateAnimation,Relativelayout知识点学习)
- android 旋转轴心(RotateAnimation)
- android 旋转向上向下图标(RotateAnimation)
- RotateAnimation旋转动画Demo
- 旋转动画 RotateAnimation
- 旋转动画RotateAnimation
- android基础笔记——自定义控件和视图:优酷菜单:RotateAnimation
- AndroidUI 视图动画-旋转动画效果 (RotateAnimation)
- RelativeLayout 知识点
- 旋转菜单之优酷视频
- Android 动画之RotateAnimation应用详解(旋转动画效果 )(转载)
- 【Android动画九章】-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画)
- RotateAnimation类:旋转变化动画类
- Android利用RotateAnimation实现旋转变化动画
- RotateAnimation类:旋转变化动画类
- RotateAnimation类:旋转变化动画类
- RotateAnimation类:旋转变化动画类
- RotateAnimation类:旋转变化动画类
- linux初学(十三)之linux权限机制
- C#高级编程小结----集合的小小总结
- 【java web】我眼中的Jquery
- Android 构建系统概览
- http://acm.hdu.edu.cn/showproblem.php?pid=1203(背包问题)
- 优酷旋转菜单(RotateAnimation,Relativelayout知识点学习)
- 用递归求数组最大值的位置
- AngularJS 资源和开发教程
- SQL语句修改表名和字段名
- 关于System V 消息队列介绍
- 神经网络及BP网络matlab+C#实现
- Android模拟器的sdcard操作技巧整理
- C语言之函数调用14—递归法打印勒让德多项式前N项
- Android SharedPreferences保存和读取对象