Android动画无法首次出现

时间:2015-09-25 14:47:38

标签: java android xml animation

首先我要说的是,我发现的答案是关于XML文件中的可见性被设置为“消失”而不是“不可见”。不幸的是,它对我不起作用。我没有找到解决这个问题的另一个解决方案,因为我是新手,这可能是一个我看不到的非常愚蠢的错误。

这是我调用以启动动画的java方法:

public void animateScoreAddition(int value){
    labelAddition.setText("+" + value);
    Animation slide = AnimationUtils.loadAnimation(game, R.anim.anim_slide);

    slide.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            labelAddition.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            labelAddition.setVisibility(View.INVISIBLE);
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams
                    (RelativeLayout.LayoutParams.WRAP_CONTENT,
                            RelativeLayout.LayoutParams.WRAP_CONTENT);

            marginTop = (int) ConversionDpPx.convertDpToPixel(10, game);
            int marginRight = (int) ConversionDpPx.convertDpToPixel(10, game);
            lp.setMargins(0, marginTop, marginRight, 0);
            labelAddition.setLayoutParams(lp);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
    labelAddition.startAnimation(slide);

}

我为游戏循环创建了一个线程,并在线程中调用runOnUiThread()方法以避免在重绘板时出现异常。这发生在我称为GameController的另一个类中,GameCanvas是处理视图的类:

    game.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    game.getGameCanvas().updateScores();

                    if(previousScore < score){
                        game.getGameCanvas().animateScoreAddition(score-previousScore);
                        previousScore = score;
                    }
                    if(animationNeeded) {
                        game.getGameCanvas().invalidate();
                        soundPool.play(soundMerge, 1, 1, 0, 0, 1);

                        try {
                            Thread.sleep(150);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    cancelAnimations();
                    game.getGameCanvas().invalidate();

                }
            });

这是动画XML文件:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:shareInterpolator="true">
<alpha
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:duration="600"
    android:repeatCount="0"
    android:startOffset="0" />
<translate
    android:duration="500"
    android:fromXDelta="72%p"
    android:toXDelta="72%p"
    android:fromYDelta="-10"
    android:toYDelta="-35"
    android:startOffset="0" />
</set>

这是主XML文件中定义的TextView:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="+0"
    android:id="@+id/labelAddition"
    android:textColor="#F67C5F"
    android:visibility="invisible"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp"
    android:layout_toStartOf="@+id/score" />

如您所见,可见性设置为“隐形”而非“消失”。您可能认为问题来自于在侦听器中将视图设置为“可见”,但即使我在调用startAinmation()函数之前执行此操作,它也会给出完全相同的结果。

另外值得一提的是,我使用了一条Log.d(...)消息来确保第一次调用该方法,而且确实足够了。它按照预期进入听众。它只是没有做任何事情。

0 个答案:

没有答案