布局:


http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

android:layout_alignParentBottom="true"
android:id="@+id/rl_out"
android:layout_width="280dip"
android:layout_height="140dip"
android:layout_centerHorizontal="true" >

android:layout_width="280dip"
android:layout_height="140dip"
android:background="@drawable/level3" />

android:id="@+id/iv_channel1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="7dip"
android:src="@drawable/channel1" />

android:id="@+id/iv_channel7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="7dip"
android:src="@drawable/channel7" />

android:id="@+id/iv_channel2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="44dip"
android:layout_marginLeft="26dip"
android:src="@drawable/channel2" />

android:id="@+id/iv_channel6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="44dip"
android:layout_marginRight="26dip"
android:src="@drawable/channel6" />

android:id="@+id/iv_channel3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="82dip"
android:layout_marginLeft="60dip"
android:src="@drawable/channel3" />

android:id="@+id/iv_channel5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="82dip"
android:layout_marginRight="60dip"
android:src="@drawable/channel5" />

android:id="@+id/iv_channel4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dip"
android:src="@drawable/channel4" />

android:id="@+id/rl_middle"
android:layout_width="180dip"
android:layout_height="90dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" >

android:layout_width="180dip"
android:layout_height="90dip"
android:background="@drawable/level2" />

android:id="@+id/iv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="5dip"
android:src="@drawable/icon_myyouku" />

android:id="@+id/iv_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="5dip"
android:src="@drawable/icon_search" />

android:id="@+id/iv_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="3dip"
android:src="@drawable/icon_menu" />

android:id="@+id/rl_inner"
android:layout_width="100dip"
android:layout_height="50dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" >

android:layout_width="100dip"
android:layout_height="50dip"
android:background="@drawable/level1" />

android:id="@+id/iv_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:src="@drawable/icon_home" />

代码:

package com.itheima.youku;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;


public class MenuView extends RelativeLayout implements OnClickListener {
// 最外层
private RelativeLayout rl_out;
// 中间层
private RelativeLayout rl_middle;
// 最内层
private RelativeLayout rl_inner;

private ImageView iv_channel1;
private ImageView iv_channel2;
private ImageView iv_channel3;
private ImageView iv_channel4;
private ImageView iv_channel5;
private ImageView iv_channel6;
private ImageView iv_channel7;

private ImageView iv_home;
private ImageView iv_info;
private ImageView iv_search;
private ImageView iv_menu;


private OnYouKuItemClickedListener mOnYouKuItemClickedListener;


public void setOnYouKuItemClickedListener(
OnYouKuItemClickedListener mOnYouKuItemClickedListener) {
this.mOnYouKuItemClickedListener = mOnYouKuItemClickedListener;
}


private boolean showing = true;


private boolean isOutAnimating;


private boolean isInAnimating;

// 初始化优酷菜单的布局
public MenuView(Context context, AttributeSet attrs) {
super(context, attrs);
initUI(context);
}

// 初始化优酷菜单的布局
public MenuView(Context context) {
super(context);
initUI(context);
}


private void initUI(Context context) {
View.inflate(context, R.layout.youku_menu_view, this);
rl_out = (RelativeLayout) findViewById(R.id.rl_out);
rl_middle = (RelativeLayout) findViewById(R.id.rl_middle);
rl_inner = (RelativeLayout) findViewById(R.id.rl_inner);

iv_home = (ImageView) findViewById(R.id.iv_home);
iv_info = (ImageView) findViewById(R.id.iv_info);
iv_menu = (ImageView) findViewById(R.id.iv_menu);
iv_search = (ImageView) findViewById(R.id.iv_search);



int count = rl_out.getChildCount();
for(int i = 0;i
rl_out.getChildAt(i).setOnClickListener(this);
}

iv_home.setOnClickListener(this);
iv_info.setOnClickListener(this);
iv_menu.setOnClickListener(this);
iv_search.setOnClickListener(this);

}


public void rotateOutLayer(int from, int to, int offsetTime) {
RotateAnimation ra = new RotateAnimation(from, to,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
1.0f);
ra.setDuration(300);
// 设置fillafter为true 动画停留在播放完毕的最后一帧的状态
ra.setFillAfter(true);
// 设置动画等待多久才开始播放
ra.setStartOffset(offsetTime);
ra.setAnimationListener(new MyAnimationLinstener(
MyAnimationLinstener.TYPEOUT));
rl_out.startAnimation(ra);
}


public void rotateMiddleLayer(int from, int to, int offsetTime) {
RotateAnimation ra = new RotateAnimation(from, to,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
1.0f);
ra.setDuration(300);
ra.setFillAfter(true);
ra.setStartOffset(offsetTime);
rl_middle.startAnimation(ra);
}


public void rotateInnerLayer(int from, int to, int offsetTime) {
RotateAnimation ra = new RotateAnimation(from, to,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
1.0f);
ra.setDuration(300);
ra.setAnimationListener(new MyAnimationLinstener(
MyAnimationLinstener.TYPEIN));
ra.setFillAfter(true);
ra.setStartOffset(offsetTime);
rl_inner.startAnimation(ra);
}


public void hideMenu() {
rotateOutLayer(0, -180, 0);
rotateMiddleLayer(0, -180, 300);
rotateInnerLayer(0, -180, 600);
showing = false;
}


public void showMenu() {
rotateInnerLayer(-180, 0, 0);
rotateMiddleLayer(-180, 0, 300);
rotateOutLayer(-180, 0, 600);
showing = true;
}


public void switchHideAndShow() {
// 判断当前显示的状态
if (showing) {
if (isOutAnimating) {
return;
}
hideMenu();
// 出去的监听
} else {
if (isInAnimating) {
return;
}
showMenu();
// 进来的监听
}
}

private class MyAnimationLinstener implements AnimationListener {
public int TYPE;

public static final int TYPEIN = 1;

public static final int TYPEOUT = 2;

@Override
public void onAnimationStart(Animation animation) {
if (TYPE == TYPEIN) {
isInAnimating = true;
} else if (TYPE == TYPEOUT) {
isOutAnimating = true;
}
}

public MyAnimationLinstener(int tYPE) {
TYPE = tYPE;
}


@Override
public void onAnimationEnd(Animation animation) {
if (TYPE == TYPEIN) {
isInAnimating = false;
} else if (TYPE == TYPEOUT) {
isOutAnimating = false;
}
}

@Override
public void onAnimationRepeat(Animation animation) {

}
}

@Override
public void onClick(View v) {
if (mOnYouKuItemClickedListener != null) {
mOnYouKuItemClickedListener.onItemClicked(v.getId());
}
}


public interface OnYouKuItemClickedListener {
public void onItemClicked(int viewid);
}

}

更多相关文章

  1. Android热更新一:JAVA的类加载机制
  2. Android(安卓)程序主菜单 布局
  3. ListView常用方法整理
  4. android 第一个界面 选项卡加toolbar
  5. Android启动流程——1序言、bootloader引导与Linux启动
  6. android 焦点问题的汇总
  7. 弹性布局和下拉列表
  8. 自定义导航条样式
  9. 一起学习laravel中的事件以及观察者吧!

随机推荐

  1. android,代码混淆,反编译,ADT 20版本
  2. Android功耗测试小工具集锦
  3. 与大家分享:【重磅】通付盾独家获得应用加
  4. Android(安卓)加载不同 DPI 资源与内存消
  5. 我的Android进阶之旅------>Android基于H
  6. Android下以root权限启动程序
  7. android 布局长度单位深入研究(2)
  8. android Canvas中的clipRect、drawBitmap
  9. 这些年正Android(安卓)- 序言
  10. Android内存回收机制