TranslationAnimation в двух представлениях не синхронизирована

Я пробую анимацию «слайд» с двумя видами, которые находятся один поверх другого (y exiss).

Вот что я делаю:

TranslateAnimation precentageTranslateAnim = new TranslateAnimation(0, 0, shareBtnsHeight, 0);
precentageTranslateAnim.setDuration(TRANSLATE_ANIMATION_DURATION);
DecelerateInterpolator interpulator = new DecelerateInterpolator();
precentageTranslateAnim.setInterpolator(interpulator);
precentageLayout.setVisibility(View.VISIBLE);
precentageLayout.startAnimation(precentageTranslateAnim);
reactionsBtnsLayout.startAnimation(precentageTranslateAnim);

Моя проблема в том, что когда происходит анимация, вы можете видеть, что представления не двигаются полностью вместе.

Во время анимации между ними есть небольшая линия.

Есть ли способ сделать синхронизацию между ними?


person roiberg    schedule 05.12.2013    source источник
comment
Похоже, вы пытаетесь сделать что-то вроде этого: stackoverflow.com/questions/19098083/, пожалуйста, проголосуйте, если это поможет вам   -  person cYrixmorten    schedule 05.12.2013


Ответы (1)


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

  1. Создайте AnimatorSet,
  2. Добавьте обе свои объектные анимации в этот набор
  3. Воспроизведите их вместе, это гарантирует, что вся ваша анимация будет работать параллельно, поэтому она будет выглядеть синхронизированной.

http://developer.android.com/reference/android/view/animation/AnimationSet.html

читайте выше ссылку для более подробной информации. Код ниже

ObjectAnimator animator1 = ObjectAnimator.ofFloat(precentageLayout, "y", shareBtnsHeight,0);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(reactionsBtnsLayout, "y", shareBtnsHeight,0); 
animator1.setDuration(TRANSLATE_ANIMATION_DURATION);
animator1.setDuration(TRANSLATE_ANIMATION_DURATION);
DecelerateInterpolator interpulator = new DecelerateInterpolator();
animator1.setInterpolator(interpulator);
animator2.setInterpolator(interpulator);
AnimatorSet set = new AnimatorSet();
set.playTogether(animator1,animator2);

set.start();
person Techfist    schedule 05.12.2013
comment
Разве анимация не настроена так, чтобы иметь более одной анимации для одного просмотра? в моем случае у меня есть один вид анимации, который я хочу установить для двух представлений... Я неправильно понимаю? - person roiberg; 05.12.2013
comment
Это не так, Animation Set может содержать анимации для нескольких представлений одновременно, просто добавьте свою различную анимацию в набор и воспроизведите их вместе. - person Techfist; 05.12.2013
comment
Но у меня есть только ОДНА анимация. оба представления используют одну и ту же анимацию. - person roiberg; 05.12.2013
comment
precentageLayout.startAnimation (precentageTranslateAnim); реакцииBtnsLayout.startAnimation(reactionBtnsTranslateAnim); это ваши две анимации, просто добавьте precentageTranslateAnim,reactionBtnsTranslateAnim в набор и играйте. - person Techfist; 05.12.2013
comment
Это моя ошибка, это одна и та же анимация. Я отредактировал вопрос. - person roiberg; 05.12.2013
comment
только что опубликовал код для вас, используйте анимацию, которую я предоставил, она решит вашу проблему. Он использует анимацию объекта, а не анимацию просмотра, здесь у вас есть необходимая возможность воспроизведения всего материала одновременно. - person Techfist; 05.12.2013
comment
Я видел animationSet вместо animatorSet :). извините и спасибо! - person roiberg; 05.12.2013
comment
Никаких проблем, добро пожаловать :-) - person Techfist; 05.12.2013