Intereting Posts
Преобразование макета кадра в изображение и сохранение его Получить начальную и конечную дату недели с номера недели и года в android Вам нужно сделать дальнейшее закрытие FileOutputStream при использовании Bitmap.compress ()? Полноэкранный режим в Android? Кредитная карта для теста Google Play Android – настройка TextView на выделение жирным шрифтом Динамический вывод текста строки на экране Android Не удалось разрешить ресурс @ id / visible при использовании TextInputLayout Пользовательское изображение Android Bar растягивающее изображение Возможно ли наследовать или расширить стиль из пользовательского атрибута Получение контекста приложения При использовании процессора ABI split в build.gradle не учитываются вкусы продукта Android Как сделать AAC доступным для HTTP-потока с помощью Android MediaPlayer? Адаптер списка обновления для Android onResume Gradle не может удалить каталог из-за .fuse_hidden

Animate изменение ширины android RelativeLayout

Мне нужно изменить ширину RelativeLayout от 0 до 600px программно, анимированным образом. Я использую следующий код:

Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { RelativeLayout.LayoutParams drawerParams = (LayoutParams) drawer.getLayoutParams(); drawerParams.width = 600; drawer.setLayoutParams(drawerParams); } }; a.setDuration(1000); //Animate for 1s layout.startAnimation(a); 

Однако по какой-то причине это не работает. Может кто-то указать мне верное направление?

Solutions Collecting From Web of "Animate изменение ширины android RelativeLayout"

Я просто набрал это и отлично работает здесь

Анимация

 public class ResizeWidthAnimation extends Animation { private int mWidth; private int mStartWidth; private View mView; public ResizeWidthAnimation(View view, int width) { mView = view; mWidth = width; mStartWidth = view.getWidth(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { int newWidth = mStartWidth + (int) ((mWidth - mStartWidth) * interpolatedTime); mView.getLayoutParams().width = newWidth; mView.requestLayout(); } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override public boolean willChangeBounds() { return true; } } 

Применение

 if(animate) { ResizeWidthAnimation anim = new ResizeWidthAnimation(leftFrame, leftFragmentWidthPx); anim.setDuration(500); leftFrame.startAnimation(anim); } else { this.leftFragmentWidthPx = leftFragmentWidthPx; LayoutParams lp = (LayoutParams) leftFrame.getLayoutParams(); lp.width = leftFragmentWidthPx; leftFrame.setLayoutParams(lp); } 

Вместо setLayoutParams() вызовите requestLayout() после изменения ширины.

Много раз самый простой способ анимировать изменения макета в Android – установить для атрибута animateLayoutChanges значение true в макете xml. Для получения дополнительной информации см. http://developer.android.com/training/animation/layout.html .

Это то, что сработало для меня:

 public class CloseImageFromRightToLeft extends Animation { private final int newWidth; private final int newHeight; private final int originalWidth; private ImageView mView; public CloseImageFromRightToLeft(ImageView v, int[] widthAndHeight) { mView = v; this.newWidth = widthAndHeight[0] / 3; this.originalWidth = widthAndHeight[0]; this.newHeight = widthAndHeight[1]; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override public boolean willChangeBounds() { return true; } @Override public void applyTransformation(float interpolatedTime, Transformation t) { int newWidth = originalWidth + (int) ((this.newWidth - originalWidth) * interpolatedTime); LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(newWidth, this.newHeight); mView.setLayoutParams(parms); mView.requestLayout(); } }