TextView仍然通过动画隐藏点击

时间:2014-07-16 08:21:50

标签: android android-layout animation android-animation

我有一个TextView,动画可以在点击时滑出。现在,当我再次单击TextView布局的区域时,点击事件仍然会被触发,就好像TextView仍然存在一样。我希望TextView表现得就像通过动画隐藏它一样。

以下是我的动画文件。

RES /动画/ slide_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true" >

    <scale
        android:duration="500"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:interpolator="@android:anim/linear_interpolator"
        android:toXScale="1.0"
        android:toYScale="0.0" />

</set>

RES /动画/ slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">

    <scale
        android:duration="500"
        android:fromXScale="1.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/linear_interpolator"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>

以下是我的布局xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/anim_tv"
        android:layout_alignParentTop="true"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:text="@string/hello_world" 
        android:gravity="center"
        android:background="#8800ff00"/>

</RelativeLayout>

以下是Activity代码。

public class MainActivity extends Activity {

    TextView animTV;

    Animation animSlideIn;
    Animation animSlideOut;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        animTV = (TextView) findViewById(R.id.anim_tv);

        animTV.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                hide();

            }
        });

        // load the animation
        animSlideIn = AnimationUtils.loadAnimation(this, R.anim.slide_in);
        animSlideOut = AnimationUtils.loadAnimation(this, R.anim.slide_out);

        show();     
    }

    private void show() {           
        animTV.startAnimation(animSlideIn);         
    }

    private void hide() {
        animTV.startAnimation(animSlideOut);            
    }

}

有人能建议解决这个问题吗?

谢谢,

阿马尔

2 个答案:

答案 0 :(得分:1)

您可以实施Animation.AnimationListener,并且在调用onAnimationEnd时,您可以将TextView的可见性更改为

答案 1 :(得分:1)

根据@blackbelt的建议,我在Activity进行了更新。

 animSlideOut.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {  }

        @Override
        public void onAnimationEnd(Animation animation) {
            animTV.setVisibility( View.GONE );
        }

        @Override
        public void onAnimationRepeat(Animation animation) { }
    });
@blackbelt解决方案部分有用。为了使其完全正常运行,我必须更新slide_out.xml以将android:fillAfter属性设置为false