2

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

  1. 调用 alpha 渐变动画,然后调用 setVisibility(GONE);
  2. 调用 alpha 渐变动画,然后调用 AnimationListener 内部的 setVisibility(GONE)
  3. 调用 alpha 渐变动画,然后删除 AnimationListener 内的父布局。

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

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

有任何想法吗?

4

1 回答 1

0

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

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

编辑:

我在 about animations 中看到了 android 文档,它说:

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

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

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

于 2012-08-10T01:40:57.827 回答