【发布时间】:2018-11-13 22:35:36
【问题描述】:
我正在开发一个使用非常简单布局的 Android 4+ 应用程序:多个视图使用 LinearLayout 堆叠在 ScrollView 中
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="HardcodedText,UseCompoundDrawables,UselessParent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
<!-- Top Container -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
<Button... />
</LinearLayout>
<!-- Hidden Container -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
... Some Content ...
</LinearLayout>
<!-- Bottom Container -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
... Some Content ...
</LinearLayout>
</LinearLayout>
</ScrollView>
HiddenContainer 在创建布局时不应该是可见的。因此,一开始BottomContainer 就在TopContainer 的正下方。单击TopContainer 中的Button 可切换HiddenContainer 的可见性。
使用hiddenContainer.setVisibility(hiddenContainer.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE) 执行此操作可以找到并且没有任何问题。但是,当视图突然出现或消失时,它看起来并不好。 相反,我想为更改设置动画。
我很惊讶我无法找到一个简单的解决方案:
- 使用
android:animateLayoutChanges="true"确实有效,但我无法控制动画。 - 虽然使用
ValueAnimator更改hiddenContainer.setScaleY(...)让我可以控制动画setScaleY(0)使容器不可见,但不会减少它在布局中占用的空间。 - 使用
ValueAnimator更改hiddenContainer.setHeight(...)可能有效,但是我不想在显示容器时使用固定高度值(例如hiddenContainer.setHeight(300)),而是由容器内容确定的高度。
那么,如何解决这个问题?
【问题讨论】:
标签: android animation android-animation