使用动画隐藏视图的正确方法?

时间:2012-08-10 00:44:08

标签: android android-layout android-animation android-view

我尝试了几种隐藏视图然后从父布局中删除它的方法:

  1. 调用alpha淡入淡出动画,然后调用setVisibility(GONE);
  2. 调用alpha淡入淡出动画,然后调用AnimationListener内的setVisibility(GONE)
  3. 调用alpha淡入淡出动画,然后删除AnimationListener中的父版式。
  4. 每次,生成的动画都会失败---视图会从屏幕上消失两次。 Alpha淡入淡出动画可以正常工作,但是当您更改可见性或将其从父视图中删除时,它会再次快速重新出现,然后再次消失。结果是一个意想不到的紧张动画。

    示例代码:

    Animation animation = AnimationUtils.loadAnimation(AddTaskActivity.this,
                R.anim.fade_out);
    final LinearLayout parentView = (LinearLayout) findViewById(R.id.addtask_root);
    animation.setAnimationListener(new Animation.AnimationListener() {
    
        @Override
        public void onAnimationEnd(Animation animation) {
        parentView.post(new Runnable() {
                public void run() {
                            parentView.removeView(test);
                    }
        });
        }
    

    该动画失败---测试视图从视图中消失两次。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

猜测 如果您在删除视图或更改视图之前透明视图,则可以执行所需操作:

@Override
    public void onAnimationEnd(Animation animation) {
    parentView.post(new Runnable() {
            public void run() {
                        // transparent your view
                        ...     
                        parentView.removeView(test);
                }
    });

修改

我在动画中看到了android文档,它说:

  

视图动画系统的另一个缺点是它只是   修改了绘制视图的位置,而不是实际的视图本身。对于   例如,如果你动画一个按钮在屏幕上移动,那么   按钮绘制正确,但您可以单击的实际位置   按钮不会改变,所以你必须实现自己的逻辑   处理这个。

     

使用属性动画系统,这些约束是完全的   删除,你可以动画任何对象的任何属性(视图和   非视图)实际上修改了对象本身。该物业   动画系统的执行方式也更加强大   动画。在较高级别,您可以为属性分配动画师   您想要制作动画,例如颜色,位置或大小等   定义动画的各个方面,例如插值和   同步多个动画师。

所以我猜您必须使用 property animation