Основная проблема вашего кода в том, что у вас нет реальных значений ширины.
Если вы посмотрите на ваш setWidthAnimation()
метод, посмотрите, где он говорит:
ValueAnimator slideAnimator = ValueAnimator
.ofInt(currentHeight, newHeight)
.setDuration(1000);
В частности, посмотрите на currentHeight и newHeight ,Вы знаете, каковы значения этих двух переменных типа int?
setWidthAnimation(gifEditableLayout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
В качестве значений ширины вы используете ViewGroup.LayoutParams.WRAP_CONTENT
и ViewGroup.LayoutParams.MATCH_PARENT
.Однако ни один из них не является фактической шириной вашего просмотра.
Вместо этого они являются просто статическими константами LayoutParams
:
Таким образом, вы по сути указываете ValueAnimator анимировать значение -1до -2 или от -2 до -1 в течение 1 секунды.
Кроме того, вы просто устанавливаете -1 или -2 для ширины LayoutParam.К счастью для вас, это действительно обеспечивает готовый внешний вид вашего представления, поскольку ширина представления может иметь 3 типа возможностей:
layoutParams.width =-1; Это то же самое, что вызов FILL_PARENT
или MATCH_PARENT
layoutParams.width = -2; Это то же самое, что вызовWRAP_CONTENT
layoutParams.width = ANY_OTHER_INT; Это то же самое, что и прямая установка ширины для этого значения.
Однако никакой анимации не произойдет.
Причина этого в том, что ValueAnimator на самом деле не выполняет анимацию.Вы можете думать об этом больше как счетчик чисел.Вы кодировали его для подсчета значений int от -1 до -2 за промежуток времени в 1 секунду.Поэтому, когда это начинается, это в WRAP_CONTENT
.Следующее возможное значение типа int равно -2, что является окончательным значением, поэтому оно будет обновлено ровно через 1 секунду.Через секунду он обновляет и запускает код, который устанавливает ширину представления на -2.Это немедленно вынуждает Вид быть MATCH_PARENT
.
Итак, чтобы это исправить, вам нужно передать действительные целочисленные значения в ваш метод setWidthAnimation()
.