如何在android中完成动画时将ListView的可见性设置为GONE?

时间:2014-09-18 13:49:39

标签: android android-animation

我使用向左移动并使用xml向右移动动画在屏幕上左右移动我的列表。

设置动画时它工作正常,它完全向左和向右移动,我在onAnimationEnd()中使用了我的列表的setVisibility,并将alpha设置为(0)并隐藏。

但是,如果我点击我的列表的上一个地方,我可以选择它的项目:(我不知道为什么它仍然在这个地方

  

这是我的move_left.xml

<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:fillAfter="true"
    >

   <translate
        android:fromXDelta="0%p"
        android:toXDelta="-25%p"
        android:duration="500" />
</set>
  

这是我的move_right.xml

<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:fillAfter="true"
    >

   <translate
        android:fromXDelta="-25%p"
        android:toXDelta="0%p"
        android:duration="500" />
</set>
  

这是隐藏listView的代码

@覆盖 public void onAnimationStart(动画动画){

if(animation.equals(move_right)){
    verticalListView.setVisibility(View.VISIBLE);
    verticalListView.setAlpha(1);
}

}

@覆盖 public void onAnimationEnd(动画动画){

if(animation.equals(move_left)){
    verticalListView.setAlpha(0);
    verticalListView.setVisibility(View.GONE);
    verticalListView.setClickable(false);
}

}

  

这个方法我用来开始动画并隐藏/显示我的列表

private void showHideList(){
    if (!isShowing) {
        isShowing = true;
        verticalListView.startAnimation(move_left);
    }else{
        isShowing = false;
        verticalListView.startAnimation(move_right);
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用Runnable()。我可以看到你的动画持续500毫秒。然后,您可以按如下方式调整可见度;

new Handler().postDelayed(new Runnable() {
                            public void run() {
                            verticalListView.setVisibility(View.GONE);
                            }
                        }, 500);

因此动画开始,500毫秒后,listView消失。

尝试在这里使用它,

private void showHideList(){
if (!isShowing) {
    isShowing = true;
    verticalListView.startAnimation(move_left);
     new Handler().postDelayed(new Runnable() {
                            public void run() {
                            verticalListView.setVisibility(View.GONE);
                            }
                        }, 500);
}else{
    isShowing = false;
    verticalListView.setVisibility(View.VISIBLE);
    verticalListView.startAnimation(move_right);

}
}

答案 1 :(得分:0)

你的适配器中的

添加:

private boolean isListEnabled = true;

public void setListEnabled(boolean isEnabled) {
     this.isListEnabled = isEnabled;
}

@Override
public boolean isEnabled(int position) {
     return isListEnabled;
}

默认情况下,您的列表将被启用,将其添加为禁用:

@Override public void onAnimationEnd(Animation animation) {
     if(animation.equals(move_left)){
        verticalListView.setAlpha(0);
        verticalListView.setVisibility(View.GONE);
        verticalListView.setClickable(false);
        yourAdapter.setListEnabled(false);
     }
}

再次启用只发送true。