2010-06-23 114 views
0

我能够让动画在模拟器上工作 - 但是我的问题是它动画了一秒钟,然后在完成动画后返回原来的位置。我怎样才能阻止这种情况发生。在Android代码中的动画翻译

这是我的动画我的对象:

private void doAnimations() { 

    logo.setVisibility(View.INVISIBLE); 
    logo.setBackgroundDrawable(null); 
    logo.setMaxHeight((logo.getHeight()/2)); 
    Animation animation = new TranslateAnimation(0, 0, 0, -200); 
    usernameEdit.startAnimation(animation); 
} 

任何帮助表示赞赏。谢谢。

回答

1

如何避免这种情况发生。

在动画上注册侦听器。然后,当听者被告知动画已完成时,请对实际布局进行一些操作以使您的更改永久生效。

+0

嗨,马克。 感谢您的帮助。但在这种情况下,我想添加一个侦听器到我正在设置动画的按钮 - 但是我希望它在动画之前和之后都能点击。 从你的回答中,我发现只注册一个新的听众不会这样做 - 你的意思是什么对于acutal布局做些什么?我没有为按钮设置x,y位置,因为它与其他事物的线性布局相同,所以我可以如何设置新的监听器(在按钮被动画之后)。 – hwrdprkns 2010-06-23 23:55:47

+0

@hwrdprkns:“但是在这种情况下,我想将监听器添加到我正在设置动画的按钮 - 但是我希望在为其设置动画之前和之后单击它。” 'AnimationListener'和'OnClickListener'是不同的东西。 “你的意思是什么对实际布局做些什么?”动画是暂时的。如果你希望你的改变是永久的,你需要在适当的小部件上修改'LayoutParams'。换句话说,暂时忽略动画,并找出如何使用布局更改来重新定位窗口小部件。然后,在动画结束时执行此操作。 – CommonsWare 2010-06-24 00:03:46

+0

“修改LayoutParams” - 我会尽力做到这一点。感谢您的建议。 – hwrdprkns 2010-06-24 21:10:52

1

虽然animation.setFillAfter(true);是一个良好的开端,但是从我的经验,我已经看到,尽管通过这种方法,其中动画停止,但仍控制保留在其前面是可见的观点并转移到地方...

为了说明这一点,假设你在位置A有一个按钮“btn1”,动画在位置B停止,现在当你设置animation.setFillAfter(true);,动画停止后,视图将在位置B可见,但点击它不会工作出。虽然如果你点击位置A(没有任何东西可见),但btn1的onClickListener方法将被调用...

因此,正如我前面所说,视图会显示(在位置B),而不是控件(它仍然位于位置A)...所以它最好你去马克的(CommonsWare的)设置动画侦听器的方法,并在动画停止时做出所需的更改...

希望这有助于!

+0

谢谢。我理解你的意思 - 如果它的代码更清晰,我会以这种方式实现它。 – hwrdprkns 2010-06-23 17:33:50