【问题标题】:Multiple transition effects with TextViews (Android)使用 TextViews (Android) 的多种过渡效果
【发布时间】:2017-03-27 17:49:03
【问题描述】:

我希望按顺序出现 3 个 TextView(第一个,然后当它完成第二个,然后是第三个)。我试过这段代码

tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setDuration(1000);
tv3.animate().alpha(1f).setDuration(1000);

但它们一起出现,所以我尝试了

tv1.animate().alpha(1f).setDuration(1000);
tv2.animate().alpha(1f).setStartDelay(1000).setDuration(1000);
tv3.animate().alpha(1f).setStartDelay(2000).setDuration(1000);

但是当我打开应用程序时,它们会一起出现,没有动画。我该如何解决这个问题?

【问题讨论】:

    标签: android textview transitions


    【解决方案1】:

    有很多方法可以做到这一点。

    如果您希望通过使用 alpha 值来实现这一点,则您制作动画的每个视图都必须在开头具有 0.0f alpha 值。然后将它们设置为 1.0f alpha。

    例如:

    private void animateViews(final ArrayList<View> viewArrayList, long delay){
        for (int i = 0; i < viewArrayList.size(); i++) {
            final int position = i;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    viewArrayList.get(position).animate().alpha(1f).setDuration(200);
                }
            }, i * delay);
        }
    }
    

    你可以使用我写的这个方法。

    用法:

    ArrayList<View> arrayList = new ArrayList<>();
    arrayList.add(tv1);
    arrayList.add(tv2);
    arrayList.add(tv3);
    animateViews(arrayList,300);
    

    delay 参数表示,每个动画开始延迟 300 * index 毫秒。 此方法还有 200 毫秒的 alpha 动画持续时间。

    第一次在 0 延迟开始,

    第二次开始延迟 1 * 300 毫秒

    第三次以 2 * 300 毫秒延迟开始

    ...

    ..

    .

    【讨论】:

      【解决方案2】:

      您需要在开始动画之前将 alpha 设置为 0

      【讨论】:

        【解决方案3】:

        添加一个 AnimationListener 并在上一个动画结束时启动下一个动画。

        AlphaAnimation alphaAnimation = new AlphaAnimation(1f,0f);
        alphaAnimation.setFillAfter(true);
        alphaAnimation.setAnimationListener(new AnimationListener() {
            public void onAnimationStart(Animation anim)
            {
            };
            public void onAnimationRepeat(Animation anim)
            {
            };
            public void onAnimationEnd(Animation anim)
            {
                nextPuzzle();
            };
        }); 
        tv1.startAnimation(alphaAnimation);
        

        【讨论】:

          【解决方案4】:

          改变时间

          tv1.animate().alpha(1f).setDuration(1000);
          tv2.animate().alpha(1f).setStartDelay(2000).setDuration(1000);
          tv3.animate().alpha(1f).setStartDelay(3000).setDuration(1000);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-09-17
            • 2020-01-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-03
            相关资源
            最近更新 更多