我阅读了很多关于动画预装Honeycomp的内容,而这些更改只考虑了内部绘图。我必须支持低至2.1的版本,因此Animator
也不是选项。
我有一个LinearLayout,包含两个按钮,位于屏幕的右侧。在某些事件中,我将右按钮设置为视图外的动画。不幸的是,Click-ecents在其原始位置注册。作为解决方法,我添加了一个AnimationListener
,并在AnimationEnd上将Buttons可见性设置为View.GONE
,如果Button再次设置为动画,则将其带回View.VISIBLE
。这会导致布局的丑陋闪现,如果我应用可见性,则会生成动画。
动画后是否还有其他方法可以跟踪视图?我可以删除一个视图,而不会在包含的布局中产生一个闪光(可能是某种doubleBuffering)吗?
修改
术语Flash
意味着视图在很短的时间内消失了它的位置,并在同一位置上再次出现。如果onAnimation[Start|End]
更改了布局
答案 0 :(得分:1)
通过“flash”,你的意思是视图跳转到他们的新位置?或者你的意思是在动画结束之间的过渡期间,有一些东西看起来像一个错误,将视图移动一秒钟到原来的位置?
无论如何,这是一个在类似场景下对我有用的示例代码。你当然需要改变它。我希望它可以帮助你:
final int deltaXToMove=50;
TranslateAnimation translateAnimation=new TranslateAnimation(0,deltaXToMove,0,0);
int animationTime=1000;
translateAnimation.setDuration(animationTime);
translateAnimation.setFillEnabled(true);
translateAnimation.setFillAfter(true);
final Button b=(Button)findViewById(R.id.button);
translateAnimation.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationEnd(Animation animation)
{
animation.setFillAfter(false);
FrameLayout.LayoutParams par=(LayoutParams)b.getLayoutParams();
par.leftMargin=deltaXToMove;
b.setLayoutParams(par);
}
...
b.startAnimation(translateAnimation);