TextViews(Android)的多重过渡效果

时间:2017-03-27 17:49:04

标签: android textview transitions

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

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);

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

4 个答案:

答案 0 :(得分:2)

有很多方法可以做到。

如果您希望使用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);

延迟参数意味着,每个动画开始300 *指数毫秒延迟。 此方法对于alpha动画也有200毫秒的持续时间。

首先从0延迟开始,

第二次以1 * 300 ms延迟开始

第三次从2 * 300 ms延迟开始

...

..

答案 1 :(得分:1)

添加一个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);

答案 2 :(得分:1)

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

答案 3 :(得分:0)

更改时间

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