2016-04-02 2 views
0

Я хотел анимировать изменение высотаTextView от 0 до его реальной высоты. Я использую этот код:андроид - гладкая анимация сменяющейся высоты представления

ValueAnimator anim = ValueAnimator.ofInt(0, height) 
         .setDuration(1000); 
       anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
        public void onAnimationUpdate(ValueAnimator animation) { 
         textView.getLayoutParams().height = (int)animation.getAnimatedValue(); 
         textView.requestLayout(); 
        } 
       }); 
       anim.start(); 

Но анимация не так гладко (не ужасно, но я думаю, что это может быть гладкой).

Каковы способы создания самых плавных анимаций такого рода?

+2

U'd лучше писать в комментариях о причине downvoting, чем просто downvote. –

ответ

0

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

Затем вы можете анимировать переход с использованием набора анимации. Кроме того, если вы не хотите, чтобы настроить анимацию и только хотите, чтобы оживить в позиции, которую вы можете использовать по умолчанию анимации, указав ниже атрибута XML в родительском макет вашего TextView

android:animateLayoutChanges= "true" 

Затем, когда вы установите видимость, как видно в вашем код, подобный ниже

textview.setVisibility(View.VISIBLE) 

Ваше текстовое изображение будет автоматически анимироваться на свое место.

+0

никогда не работал с animationSet :( –

0

Пробуйте указанные ниже коды. Надеюсь, это поможет вам.

textView.setScaleY(0); 
textView.setScaleX(0); 

textView.animate() 
       .scaleY(1) 
       .scaleX(1) 
       .setDuration(200) 
       .setInterpolator(INTERPOLATOR) 
       .start(); 

Объявление INTERPOLATOR как переменной уровня, как указано ниже.

private static final Interpolator INTERPOLATOR = new DecelerateInterpolator(); 

Это даст вам очень плавную анимацию. И вы можете играть с этим фрагментом кода и можете анимировать по мере необходимости. Вы можете изменить INTERPOLATOR. Подробнее о INTERPOLATOR.

+0

это гладко, но не то, что мне нужно :) Мне нужно, чтобы он оставался на том же месте и просто менял высоту от 0 до фактической высоты, так что каждый раз, когда вы видите больше текста TextView. Может быть, мне просто не нужно «translationY», но что-то еще –

+0

Хорошо получилось. Попробуйте следующие строки кода. 'TextView.setScaleY (0); textView.setScaleX (0); textView.animate() .scaleY (1) .scaleX (1) .setDuration (400) .setInterpolator (интерполятор) .start(); ' – sanjay

+0

проблема "масштаба" является то, что сам текст также масштабируется не только TextView. Что мне нужно - это как белый макет (не прозрачный) над TextView, и это похоже на то, что этот макет плавно выходит за пределы экрана (TextView находится в самом низу). Это должно выглядеть так. Возможно, добавление этого макета - единственный способ, idk :) –

Смежные вопросы