隐藏视图的翻译动画

时间:2013-09-16 09:59:03

标签: android android-listview android-animation android-view

我需要使用其他触摸隐藏和显示我的列表视图。因此,使用动画

隐藏屏幕左侧的列表视图
 Animation animation = new TranslateAnimation(-100, 0,0, 0);
                            animation.setDuration(100);
                            animation.setFillAfter(true);
                            lv.startAnimation(animation);
                            lv.setVisibility(0);

并使用

显示
lv.setVisibility(View.VISIBLE);

我的问题是列表视图没有得到隐藏。它会向左侧移动并再次返回。我不知道如何在触摸时完全隐藏列表视图到左边缘。请帮助实现这个

4 个答案:

答案 0 :(得分:21)

// To animate view slide out from left to right
public void slideToRight(View view){
TranslateAnimation animate = new TranslateAnimation(0,view.getWidth(),0,0);
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}
// To animate view slide out from right to left
public void slideToLeft(View view){
TranslateAnimation animate = new TranslateAnimation(0,-view.getWidth(),0,0);
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}

// To animate view slide out from top to bottom
public void slideToBottom(View view){
TranslateAnimation animate = new TranslateAnimation(0,0,0,view.getHeight());
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}

// To animate view slide out from bottom to top
public void slideToTop(View view){
TranslateAnimation animate = new TranslateAnimation(0,0,0,-view.getHeight());
animate.setDuration(500);
animate.setFillAfter(true);
view.startAnimation(animate);
view.setVisibility(View.GONE);
}

答案 1 :(得分:3)

如果您想隐藏您的视图,请使用

View.INVISIBLE // constant value 4

View.GONE // constant value 8

您当前正在使用值0 ,这是View.VISIBLE的常量值。

我想你想在动画制作后隐藏ListView吗?

但是你在开始动画后直接显示ListView。看看 AnimationListener 并隐藏ListView

onAnimationEnd(...)

例如:

// assuming the listview is currently visible
Animation animation = new TranslateAnimation(-100, 0,0, 0);
                            animation.setDuration(100);
                            animation.setFillAfter(true);

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

                }

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

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });

lv.startAnimation(animation);

答案 2 :(得分:3)

最后我找到了答案,这是对坐标值的非常简单的修改。代码是

Animation animation = new TranslateAnimation(0,-200,0, 0);
                    animation.setDuration(2000);
                    animation.setFillAfter(true);
                    listView1.startAnimation(animation);
                    listView1.setVisibility(0);

这里设置负值在第二个坐标原因从o移动两侧负面,这意味着视图正在向内侧左侧移动。

答案 3 :(得分:0)

对于你不知道的一般理解,我找到了另一个解释它非常好的帖子!视图及其动画的工作方式与预期的有所不同!

https://stackoverflow.com/a/5888969/2074990