Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android动画在第一次出现时不工作_Java_Android_Xml_Animation - Fatal编程技术网

Java Android动画在第一次出现时不工作

Java Android动画在第一次出现时不工作,java,android,xml,animation,Java,Android,Xml,Animation,首先,我要说的是,我找到的答案是,在XML文件中,可见性被设置为“消失”而不是“不可见”。不幸的是,这对我不起作用。我没有找到解决这个问题的另一个方法,因为我是新来的,这可能是一个非常愚蠢的错误,我没有看到 这是我调用的java方法来启动动画: public void animateScoreAddition(int value){ labelAddition.setText("+" + value); Animation slide = AnimationUtils.loadA

首先,我要说的是,我找到的答案是,在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();

                }
            });
game.rununuithread(新的Runnable(){
@凌驾
公开募捐{
game.getGameCanvas().updateStores();
如果(以前的分数<分数){
game.getGameCanvas().animateScoreAddition(分数上一个分数);
以前的分数=分数;
}
如果(需要动画){
game.getGameCanvas().invalidate();
soundPool.play(soundMerge,1,1,0,0,1);
试一试{
睡眠(150);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
取消动画();
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>
<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" />

这是主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>
<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" />

如您所见,可见性设置为“不可见”,而不是“消失”。您可能认为问题来自于在侦听器中将视图设置为“可见”,但即使在调用startainimation()函数之前这样做,它也会给出完全相同的结果


还值得一提的是,我使用了一条Log.d(…)消息来确保第一次调用该方法,而且确实足够了。它按预期进入侦听器。它只是不起任何作用。

你从哪里调用animateScoreAddition()?你检查了吗?我在游戏循环中调用animateScoreAddition()。我更新了问题以显示。