您的位置:首页 > 其它

多个Button的动画

2015-08-03 17:40 211 查看
1:

先看下图,制作很简单。



定义了5个按钮,然后通过点击标题栏的右侧按钮使得这五个按钮依次出现,当其中一个被选中后,按钮按照次序依次退出。主要使用的TranslateAnimation动画,然后给每个动画增添监听,在一个按钮动画结束后,另外一个按钮的动画开始。

,其中所有的动画都是一样的。因此定义了一个平移动画数组。其次由于要给每个动画设置监听,并且只需要对动画的结束做监听,因此有构建了一个AnimationListennerAdapter,这是一个抽象类,他实现了AnimationListener监听接口。

private abstract class AnimationListerAdapter implements AnimationListener{
@Override
public void onAnimationStart(Animation animation){
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public abstract void onAnimationEnd(Animation animation) ;

}


2:
各个按钮一次出现的动画设置


/**
* 点击右侧按钮时,按钮出现呈现出的动画效果,
* 各个按钮按顺序出现并下移,
* btn1出现并下移->btn2出现并下移->btn3出现并下移->btn4出现并下移->btn5出现并下移
*/
private void startbtnAnim() {
int btnNum = 5 ;
btn1.setVisibility(View.VISIBLE) ;
final Animation[] T_Anim = new Animation[btnNum];
for (int i = 0; i < btnNum; i++) {
T_Anim[i] = new TranslateAnimation(0f, 0, -70f, 0);
T_Anim[i].setDuration(100);
T_Anim[i].setInterpolator(new BounceInterpolator());
T_Anim[i].setFillAfter(true);
}

btn1.startAnimation(T_Anim[0]);

T_Anim[0].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {

btn2.setVisibility(View.VISIBLE) ;
btn2.startAnimation(T_Anim[1]);
}
});

T_Anim[1].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {

btn3.setVisibility(View.VISIBLE) ;
btn3.startAnimation(T_Anim[2]);
}
});

T_Anim[2].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {

btn4.setVisibility(View.VISIBLE) ;
btn4.startAnimation(T_Anim[3]);

}
});

T_Anim[3].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {

btn5.setVisibility(View.VISIBLE) ;
btn5.startAnimation(T_Anim[4]);
btn1.clearAnimation();
btn2.clearAnimation();
btn3.clearAnimation();
btn4.clearAnimation();

}
});

T_Anim[4].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {
btn5.clearAnimation();

}
});

}


3:

撤销这些按钮的动画代码

/**
* 当人一个按钮被按下时,所有按钮动态退出
* 各个按钮按顺序上移并退出
* btn5上移消失->btn4上移消失->btn3上移消失->btn2上移消失->btn1消失
*/
private void cancelbtnAnim() {

//按钮个数
int btnNum = 5 ;
//btnNum-1 :最上面的一个按钮不用添加消失动画
final Animation[] T_Anim = new TranslateAnimation[btnNum-1];
for (int i = 0; i < btnNum-1; i++) {
T_Anim[i] = new TranslateAnimation(0f, 0, 0f, -70);
T_Anim[i].setDuration(100);
}

btn5.startAnimation(T_Anim[0]);

T_Anim[0].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {
btn5.setVisibility(View.GONE);
btn5.clearAnimation();
btn4.startAnimation(T_Anim[1]);

}
});

T_Anim[1].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {
btn4.setVisibility(View.GONE);
btn4.clearAnimation();
btn3.startAnimation(T_Anim[2]);

}
});

T_Anim[2].setAnimationListener(new AnimationListerAdapter() {

@Override
public void onAnimationEnd(Animation animation) {
btn3.setVisibility(View.GONE);
btn3.clearAnimation();
btn2.startAnimation(T_Anim[3]);

}
});

T_Anim[3].setAnimationListener(new AnimationListerAdapter(){

@Override
public void onAnimationEnd(Animation animation) {
btn2.setVisibility(View.GONE);
btn2.clearAnimation();
btn1.setVisibility(View.GONE);
}
});
}


4:没有什么技术难点,主要是力气活。有更好的办法实现的朋友请留言,非常感谢。

源文件在这里,应该可以直接下载运行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: