Intereting Posts
Android Studio необходимо перестроить проект перед каждым запуском Android – Push Notification включены? Отслеживание мобильных объявлений Facebook с помощью Google Analytics EditText с цифровой клавиатурой по умолчанию, но с буквенными символами Исключение Java неизвестного хоста Тесты Robolectric не работают после Multidex Отключить значок colorStateList в NavigationView Создайте (повторяющийся высокий шаг) Тревога на дистанционном триггере, когда приложение не работает (iphone / android), как Find My iPhone Android Создайте QR-код и штрих-код с помощью Zxing Наименее инвазивный способ однозначно идентифицировать пользователя Android Как вводить зависимости в любой объект с помощью Dagger2? Как CursorLoader с LoaderManager знает, как отправить курсор на CursorAdapter? BaseAdapter или ArrayAdaptor – Android Ошибка получения родительского элемента для элемента: ресурс не найден, который соответствует указанному имени после обновления до AppCompat v23 Использование Android NDK

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

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

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

Вы можете просто использовать 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>