按下ImageView后动画不会触发,但按下TextView后工作正常

时间:2011-04-28 01:37:36

标签: android animation

在一个Activity中我有三个视图(其中包括):TextView,ImageView和LinearLayout - 后者我称之为controlsView。有一种方法(称之为toggleControls()来切换controlsView与动画的可见性。动画非常简单,每次调用方法时都会创建,如下所示:

private void toggleControls () {
    if (controlsView.getAnimation () != null) {
        return; // already animating
    }
    if (controlsView.getVisibility () == View.GONE) {
        Animation animation = new ScaleAnimation (1, 1, 0, 1);
        animation.setAnimationListener (new AnimationListener () {
            public void onAnimationEnd (Animation animation) { controlsView.setAnimation (null); }
            public void onAnimationRepeat (Animation animation) {}
            public void onAnimationStart (Animation animation) { controlsView.setVisibility (View.VISIBLE); }
        });
        animation.setDuration (500);
        controlsView.setAnimation (animation);
        animation.startNow ();
    } else {
        // hide
        Animation animation = new ScaleAnimation (1, 1, 1, 0);
        animation.setAnimationListener (new AnimationListener () {
            public void onAnimationEnd (Animation animation) { controlsView.setAnimation (null); controlsView.setVisibility (View.GONE); }
            public void onAnimationRepeat (Animation animation) {}
            public void onAnimationStart (Animation animation) {}
        });
        animation.setDuration (500);
        controlsView.setAnimation (animation);
        animation.startNow ();
    }
}

在TextView上触摸后调用时似乎工作正常,但是当我在ImageView上触摸后调用它时,我从未看到动画播放。相反,视图的状态(如显示)不会改变...直到我触摸屏幕上的某个位置,此时controlsView将一次性出现或消失。 (这是运行Android 3.0.1的Xoom平板电脑上的BTW。)

为了完整起见,点击的视图的温和简化的XML:

<TextView android:id="@+id/first"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:onClick="pressedFirst" android:clickable="true"
    android:text="xxxxxxxxxxxxxxxxxxxxxx"></TextView>
<ImageView android:id="@+id/second"
    android:layout_width="match_parent" android:layout_height="wrap_content" 
    android:onClick="pressedSecond" android:clickable="true"
    android:src="@drawable/something"></ImageView>

...以及controlsView:

<LinearLayout android:id="@+id/controls"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    android:visibility="visible" android:orientation="horizontal">

    <Button android:id="@+id/importantButton"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:onClick="pressedFilterButton" android:text="Important"></Button>
</LinearLayout>

上述XML中引用的函数仅调用toggleControls()方法。

我怀疑我在这里误解了一些根本性的东西。有人会给我一个线索吗?

1 个答案:

答案 0 :(得分:1)

只是抛出一个猜测,但也许你需要调用Drawable.invalidateSelf()?我知道当动画未发生时我需要这样做,但不确定你是否遇到了完全相同的问题。