Intereting Posts
Android: Lint говорит – класс, указанный в файле макета, не был найден в проекте или в библиотеках Java.lang.RuntimeException: не удалось открыть пару входных каналов Android – создать виртуальную камеру или перезаписать реальный поток Cam? (/ Dev / msm_camera / frame0, v4l2loopback)? Удалить черный фон в пользовательском диалоговом окне Доступ к акселерометру через Javascript в Android? Пользовательский интерфейс EditText для Android Как определить ColorStateList для TextView? Примеры макета Android, соответствующие рекомендациям «Метрики и сетки» Android: Я использую библиотеку AChartEngine для графиков, но не могу интегрировать графический вид артангинга с помощью android xml? Как сжимать код – предел метода 65k в dex Индикатор активности Android? В чем разница между андроидом: lineSpacingExtra и android: lineSpacingMultiplier? Ошибка приложения. Это каталог (файл: ///#android_asset/www/index.html) Черная вспышка VideoView до и после воспроизведения Получить программный экран размера экрана?

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