一个接一个的动画。有一个更好的方法吗

时间:2015-10-21 13:57:12

标签: android animation android-animation

我一直在寻找和尝试不同的方法,如下面的代码

  public void showActionButtons() {
    Animation a1 = AnimationUtils.loadAnimation(getContext(),R.anim.floating_action_button_fade_in);
    Animation a2 = AnimationUtils.loadAnimation(getContext(),R.anim.floating_action_button_fade_in);
    Animation a3 = AnimationUtils.loadAnimation(getContext(),R.anim.floating_action_button_fade_in);


    a1.setStartOffset(300);
    m_proximityFloatingActionButton.startAnimation(a1);
    m_proximityFloatingActionButton.setVisibility(View.VISIBLE);

    a2.setStartOffset(600);
    m_geofenceFloatingActionButton.startAnimation(a2);
    m_geofenceFloatingActionButton.setVisibility(View.VISIBLE);

    a3.setStartOffset(900);
    m_locationFloatingActionButton.startAnimation(a3);
    m_locationFloatingActionButton.setVisibility(View.VISIBLE);
  }

所以我在那里做的是我有3个按钮,我想一个接一个地弹出。我尝试了不同的东西。但这是唯一能让我得到正确结果的东西。但这种方式感觉不对。加载3个完全相同的动画是不对的。那么这样做的另一种方法是最佳实践吗?

2 个答案:

答案 0 :(得分:0)

所以在pskink的帮助下我得到了以下代码。如果有人有更好的方法来做到这一点。欢迎您发表答案

%25

答案 1 :(得分:0)

如果您愿意使用开源库,android transition库提供了更容易编写和理解的替代方案。

假设3个按钮是ViewGroup的唯一子节点,下面的代码将产生相同的结果:

            Cascade cascade = new Cascade(Cascade.SEQUENTIAL, 0.9f);
            ViewTransitionBuilder.transit(findViewById(R.id.lay_buttons)).alpha(0f, 1f).visible().transitViewGroup(new ViewTransitionBuilder.ViewGroupTransition() {
                @Override
                public void transit(ViewTransitionBuilder builder, ViewTransitionBuilder.ViewGroupTransitionConfig config) {
                    builder.buildAnimationFor(animationManager);
                }
            }, cascade);
            animationManager.startAnimation(600);

基本上ViewTransitionBuilder用于指定所需的效果,ViewTransitionBuilder.ViewGroupTransition用于遍历目标视图(R.id.lay_buttons)的每个子项,并使用它构建动画。 #39;已添加到animationManager

或者,如果同一ViewGroup中的3个按钮,则以下代码可以正常工作:

        ViewTransitionBuilder builder=ViewTransitionBuilder.transit(findViewById(R.id.lay_buttons)).alpha(0f, 1f).visible();
        builder.clone().range(0f, 0.33f).target(findViewById(R.id.rotate_android)).buildAnimationFor(animationManager);
        builder.clone().range(0.33f, 0.67f).target(findViewById(R.id.slide_subviews)).buildAnimationFor(animationManager);
        builder.clone().range(0.67f, 1f).target(findViewById(R.id.slide_bg)).buildAnimationFor(animationManager);
        animationManager.startAnimation(600);

要开始使用该库,请添加以下gradle脚本:

  

compile' com.github.kaichunlin.transition:core:0.9.3'

相关问题