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



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

    调用
  1. alpha 淡入淡出动画,然后调用 setVisibility(GONE);
  2. 调用
  3. alpha 淡入淡出动画,然后调用 AnimationListener 中的 setVisibility(GONE)
  4. 调用 Alpha 淡入淡出动画,然后删除动画侦听器中的父布局。

每次生成的动画都会失败,---视图从屏幕上消失两次。 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);
                }
    });
    }

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

有什么想法吗?

我想如果你在删除视图或更改它的可见性之前透明你的视图,你可以做你想做的事:

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

编辑:

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

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

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

所以我想你必须使用property animation.

最新更新