0

私はこのように2つのビューを持っていますRelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <View
        android:id="@+id/view1"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@drawable/shape_red"/>

    <View
        android:id="@+id/view2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_below="@id/view1"
        android:background="@drawable/shape_blue"/>

</RelativeLayout>

ここで、yプロパティをview10から300までアニメートします。ただし、が下(レイアウト-下)に設定されているため、-view2に従って位置を変更したいと思います。view1view2view1

onAnimationEndこれが機能していないので、アニメーションにリスナーを追加しようとしました。このような:

    ObjectAnimator ani = ObjectAnimator.ofFloat(view1, "Y", 200);
    ani.setDuration(2000);
    ani.addListener(new AnimatorListenerAdapter()
    {
        @Override
        public void onAnimationEnd(Animator animation)
        {
            LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, view2.getHeight());
            params.addRule(RelativeLayout.BELOW, view1.getId());

            view2.setLayoutParams(params);
        }
    });

しかしview2、その位置はまったく変わりませんでした。

できれば新しいアニメーションをview2作らないようにしたいので、わざわざ提案しないでください。;)

誰か提案がありますか?

4

1 に答える 1

-1

問題が解決する場合は、これを確認してください。

ani.addListener(new AnimatorListenerAdapter()
    {
        @Override
        public void onAnimationEnd(Animator animation)
        {
            LayoutParams params = view2.getLayoutParams();
            // change it ...
            params.addRule(RelativeLayout.BELOW, view1.getId());

            view2.setLayoutParams(params);
        }
    });
于 2012-07-18T11:55:15.640 に答える