2010-09-01 1 views
1

Предположим, у меня есть приложение для Android, и в этом приложении я хочу оживить графику шара в форме «L». Это потребовало бы, чтобы я определил анимацию Tween, в которой я создаю файл анимации xml (написанный ниже) и применяю его к представлению, в котором есть графическая фигура.Как динамически настроить продолжительность/скорость анимации Tween в Android

<translate> 
Ydelta = 20; 
offset = 0; 
duration = 100; 
</translate> 

<translate> 
Xdelta = 20; 
offset = 100; 
duration = 100; 
</translate> 

Теперь позволяет сказать, что я хочу, чтобы контролировать скорость этой анимации динамически, так что с течением времени, L анимация идет быстрее и быстрее и быстрее. Как я могу динамически контролировать скорость всей анимации? Я попробовал myAnimation.setDuration ($ var), но это, похоже, работает только в первой части анимации. Любая часть анимации, имеющая смещение больше 0, не имеет своей продолжительности, скорректированной методом setDuration().

Кто-нибудь знает, как я могу масштабировать анимацию с несколькими настройками равномерно?

Благодаря

пс - Я знаю, что есть способы обойти решения этого, такие как создание 2 части анимации и масштабирования каждую часть по отдельности или генерации анимации с помощью кода, но если есть более простое решение, то, что было бы предпочтительнее ,

ответ

8

Я решил это самостоятельно. Чтобы масштабировать всю анимацию, вам необходимо программно создать анимацию, и когда вы установите продолжительность анимации с помощью setDuration();, вы передаете ей переменную, а не hardcoding в xml.

Теперь каждый раз, когда я вызываю свою анимацию, я передаю ей продолжительность анимации mAnimDuration, а затем создаю новую анимацию, масштабируемую по времени. Вы заметите, что смещение второй части анимации задается длительностью первой части анимации.

Вот пример из моего кода:

 
AnimationSet rootSet = new AnimationSet(true); 

TranslateAnimation transX = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0); 
transX.setStartOffset(0); 
transX.setDuration(mAnimDuration/2); 
rootSet.addAnimation(transX); 

TranslateAnimation transX2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0); 
transX2.setStartOffset(mAnimDuration/2); 
transX2.setDuration(mAnimDuration/2); 
rootSet.addAnimation(transX2); 
Смежные вопросы