android中不流畅,滞后的动画

时间:2013-09-30 13:18:16

标签: android animation android-xml

我在游戏中使用了动画,用户以星形的形式看到了他的得分(最高得分为3星)。我在每个星星上都使用了动画(使用 startAnimation()方法)。金色的星星被放置在空白的灰色星星上,带有平移,缩放和alpha动画(我使用了设置动画)。 但是每当得分活动开始时,动画就会显示出急动/滞后/不平滑。 什么是解决方案,使动画流畅,及时

以下是显示3星中的3个

的java代码
protected void onCreate(Bundle savedInstanceState) 
    {
         ............
        Myanim1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha_scale_left);
        Myanim2= AnimationUtils.loadAnimation(getApplicationContext(), R.anim.aplha_scale_mid);
        Myanim3= AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha_scale_right);
          ......}

if(pattern_Score>targetScore*90/100)
            {
                mCountDownTimer = new CountDownTimer(1000,100) {

                @Override
                public void onTick(long millisUntilFinished) {
                    starIv1.setImageResource(R.drawable.star_gray);
                }

                @Override
                public void onFinish() {
                    starIv1.startAnimation(Myanim1);
                    starIv1.setImageResource(R.drawable.star);
                    Toast.makeText(getApplicationContext(), "timer1 stopped", Toast.LENGTH_SHORT).show();
                }
            };
            mCountDownTimer.start();
            starIv1.clearAnimation();


                mCountDownTimer1=new CountDownTimer(2000,100) {

                    @Override
                    public void onTick(long millisUntilFinished) { 
                        starIv2.setImageResource(R.drawable.star_gray);
                    }

                    @Override
                    public void onFinish() {
                        //starIv2.clearAnimation(); 
                        starIv2.startAnimation(Myanim2);
                        starIv2.setImageResource(R.drawable.star);
                    }
                };
                mCountDownTimer1.start();
                starIv2.clearAnimation();

                mCountDownTimer2=new CountDownTimer(3000,100) {

                    @Override
                    public void onTick(long millisUntilFinished) { 
                        starIv3.setImageResource(R.drawable.star_gray);
                    }

                    @Override
                    public void onFinish() {
                        //starIv3.clearAnimation(); 
                        starIv3.startAnimation(Myanim3);
                        starIv3.setImageResource(R.drawable.star);
                    }
                };
                mCountDownTimer2.start();
                starIv3.clearAnimation();....}

alpha_scale_left.xml(左星上的动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate android:fromYDelta="-100%"
           android:fromXDelta="-20%" 
           android:toYDelta="0"
           android:toXDelta="0" 
           android:duration="600"/>
<scale 
        android:fromXScale="3000%"
        android:fromYScale="3000%"
        android:toXScale="1"
        android:toYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="900"
    />
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="600" />


</set>

alpha_scale_mid.xml(中星上的动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate android:fromYDelta="-100%"
           android:fromXDelta="-5%" 
           android:toYDelta="0"
           android:toXDelta="0" 
           android:duration="600"/>
<scale 
        android:fromXScale="3000%"
        android:fromYScale="3000%"
        android:toXScale="1"
        android:toYScale="1"
        android:pivotX="50%"
        android:pivotY="0%"
        android:duration="600"
    />
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="600" />

</set>

alpha_scale_right.xml(右星上的动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="-100%"
           android:fromXDelta="5%" 
           android:toYDelta="0"
           android:toXDelta="0" 
           android:duration="600"/>
<scale 
        android:fromXScale="3000%"
        android:fromYScale="3000%"
        android:toXScale="1"
        android:toYScale="1"
        android:pivotX="50%"
        android:pivotY="0%"
        android:duration="600"
    />
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="600" />

</set>

1 个答案:

答案 0 :(得分:1)

  • 我不理解 xmls 3000%的含义尝试更改~100%
  • 的范围

查看代码我可以建议你使用一些线程而不是在主线程上加载所有动画,你应该使用Asynctask并根据一些进展你可以使用onprogressupdate方法对UI线程进行更改。

  

图形和动画由 GPU 处理或更常见   定义设备的处理器。如果没有正确呈现那么它   可能是时钟频率低的处理器的结果。