В моем основном файле макета у меня есть RelativeLayout с весом 1 (в основном для отображения карты) над LinearLayout с весом 2, объявленным следующим образом:
<LinearLayout
android:id="@+id/GlobalLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/UpLayout"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1" >
</RelativeLayout>
<LinearLayout
android:id="@+id/DownLayout"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="2"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
DownLayout содержит список элементов, когда я нажимаю на элемент, я хотел бы изменить вес DownLayout на 4, поэтому верхний макет (карта) занимает только 1/5 экрана вместо 1/3.
Мне удалось это сделать, изменив LayoutParams:
LinearLayout linearLayout = (LinearLayout) mActivity.findViewById(R.id.DownLayout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
params.weight = 4.0f;
linearLayout.setLayoutParams(params);
Это работает, но я не удовлетворен, изменение слишком быстрое, переход отсутствует, хотя я бы хотел, чтобы он был гладким. Есть ли способ использовать анимацию для этого?
Я нашел несколько примеров с ObjectAnimator, чтобы изменить weightSum, но он не хочет, я хочу (если я изменяю только это свойство, у меня есть свободное место ниже моего макета):
float ws = mLinearLayout.getWeightSum();
ObjectAnimator anim = ObjectAnimator.ofFloat(mLinearLayout, "weightSum", ws, 5.0f);
anim.setDuration(3000);
anim.addUpdateListener(this);
anim.start();
Есть ли способ использовать ObjectAnimator (или что-то еще) для этого?
Спасибо!