动画就像“快速”或低fps

时间:2013-05-05 16:38:58

标签: android chronometer

我正在创建一个具有动画的计数器,该动画可以输入和输出数字。我在xml布局中有这个动画,通常每秒运行一次。我可以在下面video中看到,我的动画做了很多事情,它没有正确使用。

动画的我的xml代码是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale 
        android:fromXScale="1.0"
        android:toXScale="2.0"
        android:fromYScale="1.0"
        android:toYScale="2.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="350"/>

    <scale 
        android:fromXScale="2.0"
        android:toXScale="1.0"
        android:fromYScale="2.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="350"/>
</set>

我的“天文台”代码读取系统时间并启动动画并更改数字:

void onTime() { //this function is executed more than 1 time per second...      
    long y=System.currentTimeMillis()-start; //start is initialized on the onCreate

    if (isBetween(Integer.parseInt(Long.toString(y)), 1000, 1070)) {
        time.setText("3");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    } if (isBetween(Integer.parseInt(Long.toString(y)), 2000, 2070)) {
        time.setText("2");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 3000, 3070)) {
        time.setText("1");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 4000, 4070)) {
        time.setText("GOOO!");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
        count.setVisibility(View.VISIBLE);
        cuenta = 0;
        count.setText("0");
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 5000, 5070)) {
        time.setText("1");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 6000, 6070)) {
        time.setText("2");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 7000, 7070)) {
        time.setText("3");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 8000, 8070)) {
        time.setText("4");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 9000, 9070)) {
        time.setText("5");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
    }else if (isBetween(Integer.parseInt(Long.toString(y)), 10000, 10070)) {
        time.setText("Time!");
        time.setAnimation(anim);
        System.out.println(Integer.parseInt(Long.toString(y)));
        //count.setVisibility(View.INVISIBLE);
        int finalcount = cuenta;
        System.out.println(finalcount);
    }
}

有关我可以更改哪些内容以正确查看动画的任何想法?我认为时间很好,最后,动画的持续时间为700毫秒,每1000毫秒开始。

1 个答案:

答案 0 :(得分:3)

看起来您正在尝试将动画缩放到两倍大小,然后将其缩小回原始大小。然而,你所拥有的是同时发生的两个动画。一个动画缩小,另一个动画扩展。这导致了冲突。

您需要做的是拥有两个动画文件。启动一个动画,并在第一个动画完成时在动画侦听器中启动第二个动画。