Я могу только догадываться, почему View
отображается в полном размере в начале анимации: возможно, onAnimationStart()
срабатывает, когда анимация начинает вычислять следующие изменения, но до того, как экран обновляется в первый раз?
При этом вы можете использовать анимации свойств вместо View
анимаций для достижения желаемого эффекта:
Во-первых, пусть ваш View
будет иметь размер просто 1dp x 1dp в начале. Вместо того, чтобы устанавливать опору, вставьте его в центр FrameLayout
размером 60dp x 60dp. При необходимости вы можете установить видимость FrameLayout
на GONE
после завершения анимации (в этом случае вам необходимо зарегистрировать Animator.AnimatorListener ).
<FrameLayout
android:layout_width="60dp"
android:layout_height="60dp">
<ImageView
android:id="@+id/like_big"
android:layout_width="1dp"
android:layout_height="1dp"
android:layout_gravity="center"
android:src="@mipmap/ic_launcher"
android:background="#0000ff"/>
</FrameLayout>
Далее анимация:
ObjectAnimator growX = ObjectAnimator.ofFloat(like_big,"scaleX", 1f, 60.0f);
ObjectAnimator growY = ObjectAnimator.ofFloat(like_big,"scaleY", 1f, 60.0f);
AnimatorSet growAnim = new AnimatorSet();
growAnim.playTogether(growX, growY);
growAnim.setDuration(1600);
growAnim.setInterpolator(new BounceInterpolator());
ObjectAnimator shrinkX = ObjectAnimator.ofFloat(like_big,"scaleX", 60.0f, 0.0f);
ObjectAnimator shrinkY = ObjectAnimator.ofFloat(like_big,"scaleY", 60.0f, 0.0f);
AnimatorSet shrinkAnim = new AnimatorSet();
shrinkAnim.playTogether(shrinkX, shrinkY);
shrinkAnim.setDuration(200);
shrinkAnim.setInterpolator(new LinearInterpolator());
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playSequentially(growAnim, shrinkAnim);
Запустите анимацию, позвонив по номеру
animatorSet.start();