2

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

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() 没有成功......)

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

提前致谢!保罗

4

2 回答 2

4

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

这是解释:

属性动画与视图动画有何不同 视图动画系统提供了仅对视图对象进行动画处理的功能,因此如果您想要为非视图对象设置动画,您必须实现自己的代码来执行此操作。视图动画系统也受到限制,因为它只公开了视图对象的几个方面以进行动画处理,例如视图的缩放和旋转,而不是背景颜色。

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

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

然而,视图动画系统需要更少的时间来设置并且需要更少的代码来编写。如果视图动画完成了您需要做的所有事情,或者如果您现有的代码已经按照您想要的方式运行,则无需使用属性动画系统。如果出现用例,将两种动画系统用于不同的情况也可能有意义。

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

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

保罗

于 2012-08-17T11:35:34.260 回答
0

取出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);
于 2012-08-07T23:47:31.860 回答