2015-07-09 1 views
1

У меня есть ImageButton, который должен менять свое положение в зависимости от угла акселератора. К сожалению, я не понимаю, как начать анимацию с последней позиции ... Пожалуйста, помогите мне разобраться. Я думаю, проблема в RELATIVE_TO_SELF, ABSOLUTE. Теперь анимация начинается в том же месте. Спасибо заранее :)Android: Как сделать анимацию, начиная с последней позиции?

public void animateButton (float newAngle) { 
    if (animation != null) { 
    if (!animation.hasEnded()) { 
     return; 
    }} 

    float goalX = 0f; 
    float goalY = 0f; 
    if (newAngle == 0) { 
     return; 
    } 
    if (newAngle < 0) { 
     newAngle = Math.abs(newAngle) + 270; 
    } 


    if ((newAngle > 0) || (newAngle <= 15)) { 
     goalX = 0f; 
     goalY = - 1f; 
    } else if ((newAngle > 15) || (newAngle <= 30)) { 
     goalX = - 0.5f; 
     goalY = - 0.5f; 
    } else if ((newAngle > 30) || (newAngle <= 90)) { 
     goalX = - 1f; 
     goalY = 0f; 
    } else if ((newAngle > 90) || (newAngle <= 180)) { 
     goalX = - 0.5f; 
     goalY = 0.5f; 
    } else if ((newAngle > 180) || (newAngle <= 195)) { 
     goalX = 0f; 
     goalY = 1f; 
    } else if ((newAngle > 195) || (newAngle <= 240)) { 
     goalX = 0.5f; 
     goalY = 0.5f; 
    } else if ((newAngle > 240) || (newAngle <= 300)) { 
     goalX = 1f; 
     goalY = 0f; 
    } else if ((newAngle > 300) || (newAngle < 360)) { 
     goalX = 0.5f; 
     goalY = - 0.5f; 
    } 


animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, goalX, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, goalY);   
animation.setDuration(1000); 
animation.setRepeatCount(1); 
animation.setRepeatMode(1); 
animation.setFillAfter(true); 
ib.startAnimation(animation);  


} 

ответ

0

Если setFillAfter(boolean filled) не работает вы можете использовать Property анимации. Они меняют параметры макета, поэтому вы можете начать анимацию после того, как она закончится с последней позиции.

Также смотрите this video.