【问题标题】:reset animation effects in android在android中重置动画效果
【发布时间】:2012-08-17 19:35:34
【问题描述】:

我正在对按钮执行淡入淡出效果。

AnimationSet set = new AnimationSet(true);
Animation animation2 = new AlphaAnimation((float) 0, 1);
animation2.setDuration(1500);
animation2.setRepeatMode(0);
set.addAnimation(animation2);
set.setFillAfter(true); // leaves the animation in its final status
btn.startAnimation(set);

我正在使用setFillAfter(true) 选项使按钮可见。这很好用。现在我想再次执行动画,但不能再将我的按钮设置为在屏幕上不可见,除非我重新启动应用程序。 (也试过 invalidate() 没有成功...)

任何想法都会“如此”受欢迎。

提前致谢! 保罗

【问题讨论】:

  • 您在再次申请之前尝试过clearAnimation() 吗?

标签: android animation


【解决方案1】:

感谢您的帮助。实际上我在developpers doc上找到了答案。 “查看动画”(我尝试过)和“属性动画”之间存在很大差异。基本上,视图动画会重绘您正在处理的视图的图像,但不会影响原始视图。因此,如果您从示例中翻译您的视图,则在屏幕上视图会移动,但以编程方式保持在其初始状态,并将在其原始位置捕获事件。

解释如下:

属性动画与视图动画的区别视图动画 系统提供了只为 View 对象设置动画的能力,所以如果你 想要动画非视图对象,你必须实现你自己的 这样做的代码。视图动画系统也受限于 事实上,它只将 View 对象的几个方面暴露给动画, 例如视图的缩放和旋转,而不是背景 例如颜色。

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

有了属性动画系统,这些约束就完全没有了 删除,您可以为任何对象的任何属性(视图和 非视图)并且对象本身实际上已被修改。该物业 动画系统在执行方式上也更加健壮 动画。在高层次上,您将动画师分配给属性 您想要制作动画的内容,例如颜色、位置或大小,并且可以 定义动画的各个方面,例如插值和 多个动画师的同步。

但是,视图动画系统的设置和设置时间更短 需要更少的代码来编写。如果视图动画完成了一切 您需要做的事情,或者如果您现有的代码已经可以正常工作 你想要的,没有必要使用属性动画系统。它 将两种动画系统用于不同的场景也可能有意义 用例出现时的情况。

http://developer.android.com/guide/topics/graphics/prop-animation.html

就我而言,我使用了属性动画,它符合我所有的动画需求。谢谢您的支持! :)

保罗

【讨论】:

    【解决方案2】:

    取出set.setFillAfter(true); 并使用animationListener 将Button 设置为在动画结束时可见,它会给用户提供相同的效果,您将能够再次使用View.setVisibility(View.INVISIBLE); 使其不可见

    AnimationListener animListener;
    
    
    animListener = new Animation.AnimationListener() {
    
            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void onAnimationEnd(Animation animation) {
                btn.setVisibility(View.VISIBLE);
            }
    };
    animation2.setAnimationListener(animListener);
    

    【讨论】:

    • 嗨蒂姆,取出set.setFillAfter(true) 然后使用 btn.setVisibility() 工作但不是很流畅。你可以看到有一个非常短的“空白”时刻......这个想法听起来很棒。你不认为有一些动作可以取消动画的效果吗?
    • 我想我没有但使用属性动画解决了我的问题。看我的下一篇文章。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多