Android动画失效

记今天在应用中使用开源控件FloatingActionButton时,弹出按钮的动画失效(即没有播放动画效果)。

调试了很久后发现,动画的失效居然是FragmentViewPagerAdapter中的Fragment数量(或者说某个Fragment)引起的。如下所示,将添加某个fragment的语句注释掉之后动画生效了,取消注释之后动画又失效了。

final ArrayList viewPagerList = new ArrayList();
homeFragment = new HomeFragment();
blockFragment = new BlockFragment();
localFragment = new CityLocationFragment();
viewPagerList.add(homeFragment);
viewPagerList.add(blockFragment);
viewPagerList.add(localFragment);
// viewPagerList.add(new SuiShouPaiFragment());          <----   注释此行动画生效

fragmentAdapter.setList(viewPagerList);
viewPager.setAdapter(fragmentAdapter);


接下来继续跟踪问题,发现SuiShouPaiFragment中有这么一段,注释了就好了:

linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mLineImage
.getLayoutParams();
int marginleft = m_lin_top.getLeft()
+ (mSelectText.getWidth() - mLineImage
.getWidth()) / 2;
lp.leftMargin = marginleft;
mLineImage.setLayoutParams(lp);
}
});

看了下这段代码的功能,真的是醉了,addOnGlobalLayoutListener是监听布局的变化,在监听布局的变化后又去修改布局,导致onGlobalLayout方法一直在回调,从未停过。

这就导致了FloatingActionButton动画的失效。旧代码真的是各种坑啊!调试了一个晚上!希望大家以后写代码注意点。


你可能感兴趣的:(Android)