如何使用ObjectAnimator为LinearLayout内的按钮设置动画

时间:2014-02-05 21:33:13

标签: android

我正在尝试使用ObjectAnimator为LinearLayout内的Button设置动画,当我点击Layout时没有任何反应。

但如果我在LinearLayout内部通过ImageViews更改按钮,则动画开始没有问题。

Heres是xml:

<LinearLayout        
    android:id="@+id/images"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img1"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"         
        android:src="@drawable/image1"
        android:visibility="visible"
        />

    <ImageView
        android:id="@+id/img2"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"
        android:src="@drawable/image2"
        android:visibility="gone" />

</LinearLayout>

这是代码:

final LinearLayout images = (LinearLayout) findViewById(R.id.images);
    images.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {               
            final ObjectAnimator goneToVisible = ObjectAnimator.ofFloat(images, "rotationY", -90f, 0f);
            goneToVisible.setDuration(1000);
            goneToVisible.start();
        }
    });

Everthing工作正常,但当我通过Button更改ImageView时:

<LinearLayout        
    android:id="@+id/images"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/img1"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"         
        android:background="@drawable/image1"
        android:visibility="visible"
        />          
    <Button
        android:id="@+id/img2"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"
        android:background="@drawable/image2"
        android:visibility="gone" />        
</LinearLayout>

final LinearLayout images = (LinearLayout) findViewById(R.id.images);
    images.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            //flip(image1, image2, animLength.getProgress());
            final ObjectAnimator goneToVisible = ObjectAnimator.ofFloat(images, "rotationY", -90f, 0f);
            goneToVisible.setDuration(1000);
            goneToVisible.start();
        }
    });

动画无效。

如果LinearLayout的取出按钮有效,但不在里面。我需要使用Buttons而不是ImageView。

我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

ImageView的第一个代码适合您,因为默认情况下ImageView无法点击,因此当您点击LinearLayou时,点击事件会响应LinearLayout和布局点击事件中的动画将起作用

使用Button的第二个代码不适合您,因为Button具有可点击性,因此当您点击布局时button具有布局的高度,以便单击布局,click事件将响应Button而不是布局,并且您没有Button点击事件的监听器没有动画发生,所以您可以将它放在xml布局中

android:clickable="false"

这将使事件直接响应布局或使Button本身的动画像

一样
 final Button btn = (Button) findViewById(R.id.img1);
        final LinearLayout images = (LinearLayout) findViewById(R.id.images);
        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //flip(image1, image2, animLength.getProgress());
                final ObjectAnimator goneToVisible = ObjectAnimator.ofFloat(btn, "rotationY", -90f, 0f);
                goneToVisible.setDuration(1000);
                goneToVisible.start();
            }
        });

喂我回来