В любом случае, чтобы программно изменить макет весового свойства линейного макета

У меня два вида в линейном макете, я программно меняю их свойство layout_weight. Есть ли способ, который я мог бы оживить это изменение веса, поэтому, когда вес изменен, изображения скользят к новому размеру?

Вы можете просто использовать ObjectAnimator.

ObjectAnimator anim = ObjectAnimator.ofFloat( viewToAnimate, "weight", startValue, endValue); anim.setDuration(2500); anim.start(); 

Одна проблема заключается в том, что класс View не имеет метода setWeight () (который требуется ObjectAnimator). Чтобы обратиться к этому, я написал простую оболочку, которая помогает архивировать анимацию веса.

 public class ViewWeightAnimationWrapper { private View view; public ViewWeightAnimationWrapper(View view) { if (view.getLayoutParams() instanceof LinearLayout.LayoutParams) { this.view = view; } else { throw new IllegalArgumentException("The view should have LinearLayout as parent"); } } public void setWeight(float weight) { LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams(); params.weight = weight; view.getParent().requestLayout(); } public float getWeight() { return ((LinearLayout.LayoutParams) view.getLayoutParams()).weight; } } 

Используйте его таким образом:

  ViewWeightAnimationWrapper animationWrapper = new ViewWeightAnimationWrapper(view); ObjectAnimator anim = ObjectAnimator.ofFloat(animationWrapper, "weight", animationWrapper.getWeight(), weight); anim.setDuration(2500); anim.start(); 

Я тоже смотрел на это. В конце концов я решил это, оживив свойство weightsum родителя, которое работает очень хорошо, если у вас есть два представления в LinearLayout.

См. Анимация свойства weightSum с помощью ObjectAnimator

В приведенном ниже примере, если вы анимируете weightSum от 1.0 до 2.0, экран 2 будет хорошо анимировать.

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dual_pane" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightSum="1.0"> <!-- Screen 1 --> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff0000" android:layout_weight="1"> </LinearLayout> <!-- Screen 2 --> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff6600" android:layout_weight="1"> </LinearLayout> </LinearLayout> ? <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dual_pane" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightSum="1.0"> <!-- Screen 1 --> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff0000" android:layout_weight="1"> </LinearLayout> <!-- Screen 2 --> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:background="#ff6600" android:layout_weight="1"> </LinearLayout> </LinearLayout> 
Intereting Posts
Как изменить программно глобальные настройки, такие как «тактильная обратная связь»? Android: Как подключить временное, сгенерированное изображение к электронному письму? Как реализовать пакет NumberPicker в Android API 7? Android: Как разместить кнопку конца текстового поля с многострочным текстом? Как показать admob interstitial при выходе приложения Обрезать изображение фиксированного размера в Android ArrayList не инициализируется с предопределенным размером Как установить значок любимой звезды в положение ON при нажатии и выключении при повторном нажатии на андроид Резервное копирование ключа подписи, используемого для подписи приложения Android в Eclipse Мельчайший ширина макеты. Ошибка в Nexus 7? Анимированная (VectorDrawable) анимация программно во время выполнения Android SearchView с другими элементами в ActionBar Как вы можете вручную изменить порядок ListView в Android? Связь с android mysql Meteor android build говорит: «Приложение не установлено»