项目中需要让TextView 滚动一会显示一行一会显示一行
想了下用移动动画实现。但是实际中在整这个动画时调了好久。主要用到的动画方式是移动动画:TranslateAnimation
代码:
/**
* 动画组装
*/
private void noticeBarAniset() {
showNotice(timeNum);//调用TextView 显示
timeNum++;
AnimationSet animSet = new AnimationSet(true);
TranslateAnimation translateUp0 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0.5f);
translateUp0.setDuration(TIMER_PERIOD);
AlphaAnimation alphaAnimation0 = new AlphaAnimation(0.1f, 1.0f);
alphaAnimation0.setDuration(TIMER_PERIOD);
// translateUp0.setFillEnabled(true); // 使能填充效
// translateUp0.setFillAfter(true); // 保留在终止位置
TranslateAnimation translateUp1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, -1f, Animation.RELATIVE_TO_SELF, -2.5f);
// translateUp1.setFillEnabled(true); // 使能填充效
// translateUp1.setFillAfter(true); // 保留在终止位置
translateUp1.setDuration(TIMER_PERIOD);
translateUp1.setStartOffset(TIMER_STOP);
AlphaAnimation alphaAnimation1 = new AlphaAnimation(1.0f, 0.1f);
alphaAnimation1.setDuration(TIMER_PERIOD);
alphaAnimation1.setStartOffset(TIMER_STOP);
animSet.addAnimation(translateUp0);
animSet.addAnimation(alphaAnimation0);
animSet.addAnimation(translateUp1);
animSet.addAnimation(alphaAnimation1);
animSet.setFillEnabled(true);
animSet.setFillAfter(true);
noticeBarTextView.startAnimation(animSet);
animSet.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
noticeBarAniset();// 递归调用
}
});
}
PS:
使用AnimationSet的方式 把两个主要的TranslateAnimation 组合起来,并且添加两个渐变的动画进行修饰
循环跑马灯 是通过监听set动画完成后递归调用。显示内容的改变放在showNotice() 函数内完成,其中
timeNum 成员变量起到的是对递归次数的标记。
另:注释掉的几行
// translateUp0.setFillEnabled(true); // 使能填充效
// translateUp0.setFillAfter(true); // 保留在终止位置
启动的是动画完成定格view的作用,直接定格 set了所以子动作定格没有开启。
动画函数参数及解析参考: