Intereting Posts
Удаленная отладка с эмулятором Android Очистить кэш в приложении Android программно Как Android может передавать локальное имя BLE, как в iOS? Как проверить, подписана ли APK или «отладить сборку»? Диспетчер виртуальных устройств Android падает с «двойным свободным или повреждением» Android: создайте кнопку переключения с изображением и без текста. Активность Android SDK WebView Как обфускать мой проект андроида в Eclipse IDE? Как я могу сделать сканер отпечатков пальцев USB, подключенный к мобильному телефону / планшету, успешно? Картинка / трансформирование холста Android не изменяет зону клики Создание класса модели данных для обработки базы данных Android SQLite Query, Insert, Update, Delete, всегда нужно быть в фоновом потоке? MAILTO Ссылка по электронной почте, чтобы начать новое письмо FloatingActionButton, квадратная кнопка ниже уровня API 17 Как получить выбранный элемент диалогового окна Alert Dialog?

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(); } }