Android-анимационные повороты
Я использую следующий код, чтобы сделать повороты (влево или вправо) в серии. Так что, если я называю это один за другим, т.е. turn(90); turn(90); turn(-90);
все, что он показывает, является последним. Я хотел бы показать их все, и это ждет, пока первое не будет сделано, прежде чем перейти к следующему. Есть идеи?
public void turn(int i)
{
RotateAnimation anim = new RotateAnimation( currentRotation, currentRotation + i,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
currentRotation = (currentRotation + i) % 360;
anim.setInterpolator(new LinearInterpolator());
anim.setDuration(1000);
anim.setFillEnabled(true);
anim.setFillAfter(true);
token.startAnimation(anim);
}
1 ответ
Решение
Поэтому я создал очередь анимаций и итератор для ее запуска... после того, как я определил все необходимые анимации, добавил их в очередь, я запустил первую, затем в обработанном AnimationListener остальные.
Queue<RotateAnimation> que = new LinkedList<RotateAnimation>();
Iterator<RotateAnimation> queIt;
public void turnToken(int i){
RotateAnimation anim = new RotateAnimation( currentRotation, currentRotation + i,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
currentRotation = (currentRotation + i) % 360;
anim.setInterpolator(new LinearInterpolator());
anim.setDuration(1000);
anim.setFillEnabled(true);
anim.setAnimationListener(this);
anim.setFillAfter(true);
que.add(anim);
}
AnimationListener:
@Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
if(queIt.hasNext()){
token.startAnimation((Animation) queIt.next());
}
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}