[英]Animate view height in android
我有一個帶有按鈕的視圖持有者,可以在同一布局中切換其他視圖的可見性(我用 id locals_additional_filters
切換視圖的可見性) 。 現在通過使視圖可見,父布局高度( id 是host_filter_holder
)正在改變,我的問題是如何為父布局高度設置動畫?
這是我的 xml:
<LinearLayout
android:id="@+id/host_filter_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/red_borders_btn"
android:orientation="vertical">
<Button
android:id="@+id/find_host_filter"
android:layout_width="match_parent"
android:layout_height="45dp"
android:text="@string/more_filters"
android:background="@null"
android:textColor="@color/red_borders"
android:textSize="16sp" />
<LinearLayout
android:id="@+id/locals_additional_filters"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical"
android:padding="10dp"
android:animateLayoutChanges="true"
android:visibility="gone">
<RadioGroup
android:id="@+id/locals_gender_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/female"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:text="Female"
android:textColor="@color/black" />
<RadioButton
android:id="@+id/male"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Male"
android:textColor="@color/black" />
</RadioGroup>
<EditText
style="@style/NoBottomLineEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:clickable="true"
android:drawableEnd="@drawable/ic_arrow"
android:drawableRight="@drawable/ic_arrow"
android:hint="Search your friends in 2km" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/interests"
android:textColor="@color/dark_gray"
android:textSize="14sp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/locals_filter_recycle"
android:layout_width="match_parent"
android:layout_height="40dp" />
</LinearLayout>
</LinearLayout>
使用 Value animator 非常簡單,您可以這樣做:
myView.animate().scaleY( anyValue ).setDuration( durationInMills );
使用 ValueAnimator 或 ObjectAnimator:
LinearLayout container = findViewById(R.id.host_filter_holder);
Button btn = findViewById(find_host_filter);
LinearLayout changeBox = findViewById(R.id.locals_additional_filters);
ValueAnimator animator = ValueAnimator.ofInt(btn.getHeight() +
changeBox.getHeight(),btn.getHeight());
animator.setTarget(container );
animator.setDuration(1000).start();
animator.addUpdateListener(new AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
LayoutParams layoutparams = container.getLayoutParams();
layoutparams.height = animation.getAnimatedValue();
container.setLayoutParams(layoutparams );
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.