これは Android プログラミングへの私の最初の本格的な進出ですが、もっと Java の問題を抱えているように感じます。ScheduledThreadPoolExecutor がどのように機能するかについてのある種の大きな誤解です (ただし、AnimatedSprites の AndEngine の問題であるという考えを喜んで受け入れます)。 、 それも)。基本的には、onFling が発生するまでスプライトを静止させたいと考えています。スプライトがアニメーション化し、1 秒後に再び停止します。ユーザーは、水の中をスプライトを「泳ぐ」ためにフリングを続けなければなりません。私が抱えている問題は、アニメーションにあります。1 秒のタイムスパンに複数の Fling がある場合、アニメーションは停止する前に 1 つまたは 2 つのフレームのみを表示し、「アニメーションを停止する」タスクが積み重なっているように感じます。私' これらすべてが機能するようになったら、Flings が十分に長く、正しい方向に向いていることを確認します。ScheduledThreadPoolExecutor を最初にインスタンス化するとき、プール サイズ 1 を提供します。これは、私の理解では、一度に複数のタスクをキューに入れることはできないことを意味します。その上、.schedule() を呼び出す前に、.remove() タスクを実行して、そこに何もないことを確認します。これは単純なことだと思いますが、これを適切に使用する方法について誤解しているだけです。コードの関連部分をここに貼り付けます。そこに何もないことを確認するだけです。これは単純なことだと思いますが、これを適切に使用する方法について誤解しているだけです。コードの関連部分をここに貼り付けます。そこに何もないことを確認するだけです。これは単純なことだと思いますが、これを適切に使用する方法について誤解しているだけです。コードの関連部分をここに貼り付けます。
...
private ScheduledThreadPoolExecutor shed = new ScheduledThreadPoolExecutor(1);
private Runnable slowDown = new Runnable(){
public void run(){
if (eelSprite.isAnimationRunning())
eelSprite.stopAnimation(0);
};
};
...
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
shed.remove(slowDown);
shed.schedule(slowDown, 1000, TimeUnit.MILLISECONDS);
if (!(eelSprite.isAnimationRunning()))
eelSprite.animate(frame_duration, 0, 12, true);
return false;
}