Intereting Posts
Получить текущее системное время PCM Raw Bytes для аудио на Android Как опубликовать источники Android .aar, чтобы заставить Android Studio автоматически их найти? Полный список Cocos2d-x Tutorial & Guide List Поместите кнопки внизу экрана с помощью LinearLayout? Разработка игр, странный эффект изображения при перемещении камеры Ошибка типа 3 Ошибка: класс действия {} не существует Как создать диалоговое окно без заголовка? Прокрутка выпадающего меню над клавиатурой в autocompletetextview Использование типов сборки в Gradle для запуска того же приложения, которое использует ContentProvider на одном устройстве Фрагменты Android: когда использовать скрыть / показать или добавить / удалить / заменить? Как получить объект приложения в класс фрагмента Диалоговое окно андроида прозрачно Как вы можете получить номер версии манифеста из XML-переменных приложения (Layout)? Android «входной ключ оболочки adb keyevent KEYCODE_SEARCH» Не работает

Изменение размеров макетов программным способом (как анимация)

Я хочу изменить размеры макетов в своей работе.

Вот код основного XML:

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="vertical" > <LinearLayout android:id="@+id/top" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:background="#3ee3e3" > </LinearLayout> <LinearLayout android:id="@+id/middle" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </LinearLayout> <LinearLayout android:id="@+id/bottom" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:background="#fe51e6" > </LinearLayout> </LinearLayout> 

Как вы можете видеть, верхняя и нижняя высота макета равна 0, а средний макет охватывает все места.

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

Я хочу, чтобы это выглядело как анимация.

Как мне это сделать?

благодаря

Solutions Collecting From Web of "Изменение размеров макетов программным способом (как анимация)"

Я написал ResizeAnimation для аналогичной цели. Это просто, но дорого.

 /** * an animation for resizing the view. */ public class ResizeAnimation extends Animation { private View mView; private float mToHeight; private float mFromHeight; private float mToWidth; private float mFromWidth; public ResizeAnimation(View v, float fromWidth, float fromHeight, float toWidth, float toHeight) { mToHeight = toHeight; mToWidth = toWidth; mFromHeight = fromHeight; mFromWidth = fromWidth; mView = v; setDuration(300); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { float height = (mToHeight - mFromHeight) * interpolatedTime + mFromHeight; float width = (mToWidth - mFromWidth) * interpolatedTime + mFromWidth; LayoutParams p = mView.getLayoutParams(); p.height = (int) height; p.width = (int) width; mView.requestLayout(); } } 

На Honeycomb (Android 3.0) есть классы Animator и ObjectAnimator для более плавной анимации.

Прочтите здесь

Пример о том, как оживить перемещение группы просмотра (LinearLayout) с помощью интерполятора отказов.

 BounceInterpolator bounceInterpolator = new BounceInterpolator(); ObjectAnimator anim = ObjectAnimator.ofFloat(myViewGroup, "translationY", 0f, -200 ); anim.setInterpolator(bounceInterpolator); anim.setDuration(1100).start(); 

Это вызовет гладкую анимацию с эффектом отскока и действительно переместит представления, не похожие на анимацию, до Honeycomb. Из документов:

Предыдущие анимации изменили внешний вид целевых объектов … но они фактически не изменили сами объекты.