1

我在游戏中的一项活动中使用了动画,用户以星星的形式看到他的分数(最高得分为 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>
4

1 回答 1

1
  • 我不明白3000%在你的xmls中尝试改变范围的含义~100%

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

或者

图形和动画由设备的处理器GPU或更常见的术语处理。如果渲染不正确,则可能是处理器时钟频率低的结果。

于 2013-09-30T13:23:46.053 回答