最近项目中需要用到一个过渡动画,就是一个图片渐隐渐现,然后重复五次后过渡动画消失,首先说下我的思路,一个timer,重复执行,然后执行的时候肯定要不断调用显示、隐藏动画。其中定时器每次重复的时间是动画显示(或隐藏)的时间
public class MainActivity extends ActionBarActivity {
static int num = 0;//定义一个num来记录次数,就是来记录过渡动画的次数
Timer timer;//定时器,重复执行动画
private AlphaAnimation mHideAnimation= null;
private AlphaAnimation mShowAnimation= null;
static SeekBar seek; //显示和隐藏的图片
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seek = (SeekBar)findViewById(R.id.timeline_new);
seek.setProgress(20);
seek.setOnSeekBarChangeListener(seekListener);
seek.bringToFront();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message=new Message();
message.what=0;
mHandler.sendMessage(message);
}
}, 50, 2000);
}
//涉及到ui操作,返回到主线程中操作
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
if(msg.what == 0){
if( num % 2 != 0 ){
setHideAnimation(seek,2000);
}else{
setShowAnimation(seek,2000);
}
num++;
if(num>10){//重复次数够了以后,将num置回初始值,关闭定时器
num=0;
timer.cancel();
}
}
}
};
//渐渐隐藏动画
private void setHideAnimation( View view, int duration ){
if( null == view || duration < 0 ){
return;
}
if( null != mHideAnimation ){
mHideAnimation.cancel( );
}
mHideAnimation = new AlphaAnimation(1.0f, 0.0f);
mHideAnimation.setDuration( duration );
mHideAnimation.setFillAfter( true );
view.startAnimation( mHideAnimation );
}
//渐渐显示动画
private void setShowAnimation( View view, int duration ){
if( null == view || duration < 0 ){
return;
}
if( null != mShowAnimation ){
mShowAnimation.cancel( );
}
mShowAnimation = new AlphaAnimation(0.0f, 1.0f);
mShowAnimation.setDuration( duration );
mShowAnimation.setFillAfter( true );
view.startAnimation( mShowAnimation );
}