

// 设置
boolean SettingAniOn = true;
// 切换层叠按钮状态(层叠、展开)
public void Setting(View view)
{
settingAni(!SettingAniOn);
}
// 设置按钮层叠动画效果
private void settingAni(boolean on)
{
SettingAniOn = on;
final int ANITIME = 300;
// 旋转动画
View setting = this.findViewById(R.id.setting);
rotateAni(setting, on, ANITIME);
// 位移动画
int[] ids = { R.id.music, R.id.about, R.id.more, R.id.help };
for (int i = 0; i < ids.length; i++)
{
View V = findViewById(ids[i]);
transAni(V, i + 1, on, ANITIME);
}
}
private void transAni(final View view, int id, final boolean on, final int ANITIME)
{
final float Y = id * 40;
AnimationSet AniSet = new AnimationSet(true);
TranslateAnimation transAin = new TranslateAnimation(0, 0, on ? Y : 0, on ? 0 : Y);
transAin.setDuration(ANITIME);
transAin.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationStart(Animation arg0)
{
view.setClickable(false);
}
@Override
public void onAnimationRepeat(Animation arg0)
{}
@Override
public void onAnimationEnd(Animation arg0)
{
view.setClickable(true);
view.setVisibility(on ? View.VISIBLE : View.INVISIBLE);
}
});
AniSet.addAnimation(transAin);
view.startAnimation(AniSet);
}
private void rotateAni(final View view, final boolean on, final int ANITIME)
{
AnimationSet AniSet = new AnimationSet(true);
final float DEGREE = 180;
RotateAnimation rotateAni = new RotateAnimation(0, on ? DEGREE : -DEGREE, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAni.setDuration(ANITIME + 30);
rotateAni.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationStart(Animation arg0)
{
view.setClickable(false);
}
@Override
public void onAnimationRepeat(Animation arg0)
{}
@SuppressLint("NewApi")
@Override
public void onAnimationEnd(Animation arg0)
{
view.setClickable(true);
view.setRotation(on ? -DEGREE : 0);
}
});
AniSet.addAnimation(rotateAni);
view.startAnimation(AniSet);
}
// 设置层叠按钮初始状态 true展开、false层叠
public void initSetting(boolean on)
{
SettingAniOn = on;
int[] ids = { R.id.music, R.id.about, R.id.more, R.id.help };
for (int i = 0; i < ids.length; i++)
findViewById(ids[i]).setVisibility(on ? View.VISIBLE : View.INVISIBLE);
}