【问题标题】:How to workaround a Layout Animation pre Honeycomp如何解决 Honeycomp 之前的布局动画
【发布时间】:2012-07-30 17:44:38
【问题描述】:

我读了很多关于 Honeycomp 之前的动画,而这些变化只考虑了内部绘图。我必须支持低至 2.1 的版本,所以 Animator 也不是一个选项。

我有一个 LinearLayout,其中包含两个位于屏幕右侧的按钮。在某些事件中,我将右侧的按钮设置为视图之外的动画。不幸的是,Click-ecents 注册在其原始位置。作为一种解决方法,我添加了一个AnimationListener,并在AnimationEnd 上将Buttons 可见性设置为View.GONE,如果Button 再次被动画化,则将其带回View.VISIBLE。如果我应用可见性,这会导致布局的丑陋闪烁。

还有其他方法可以在动画之后跟踪视图吗?我可以删除一个视图,而不会导致包含的布局内出现闪烁(可能是某种双缓冲)吗?

编辑: 术语Flash 表示视图在其位置上消失很短的时间,然后再次出现在同一位置上。如果onAnimation[Start|End] 更改了该布局内的某些内容,就会发生这种情况

【问题讨论】:

    标签: android animation layout


    【解决方案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);
    

    【讨论】:

    • 看看我的编辑,看看我所说的flash是什么意思。我也试过你的实现,但似乎setFillAfter(false)onAnimationEnd 内部没有效果。此外,如果我离开它并相应地更改值,flash 会再次出现。
    • 我不明白。我的实现是否会出现 Flash 错误(没有对其进行任何更改)?
    • 我只改了deltaX,我有一个RelativeLayout
    • 请尝试在 frameLayout 上使用它并告诉我它是否适合您,因为我还没有在其他布局上测试过它。它们可能是相同的,但我想确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2012-09-12
    • 2020-09-07
    • 2010-09-13
    相关资源
    最近更新 更多