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