0

アニメーションを作成したいのですが、ボールの画像が10枚あり、次のようにします。

  1. Image1表示、他のすべての画像は非表示
  2. Image2他のすべての画像を非表示に表示
  3. ..。
  4. Image10他のすべての画像を非表示に表示

1つのアニメーションでそれを行う必要がありますか(どのように?)、またはpathimageにある画像を表示して他の画像を非表示にするJavaメソッドshowImage(String pathimage)を作成する必要がありますか?を使用して時間遅延のアイデアを入れてもらえますか

handler.postDelayed(new Runnable() { 
    public void run() { }
}

編集、ここに私のコードがあります 問題は、run()が常に無限ループのように見えるもので呼び出されることです。しかし、私のエラーはどこにあるのかわかりません

ゲーム活動

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
.....
        ImageView image2 = (ImageView) findViewById(R.id.imageView3);
        image2.setOnTouchListener(new OnTouchListener(){

            @Override
            public boolean onTouch(View arg0, MotionEvent arg1) {
                myAsyncRunnable mar = new myAsyncRunnable(GameActivity.this);
                mar.execute(null);
                PhotoTask photoTask = new PhotoTask(camera,surfaceCamera,isPreview,holder,GameActivity.this);
                photoTask.execute(null);
                Log.w("GAMEACTIVITY","PHOTOTASK");
                return false;
            }

        });
}

私の非同期タスク

public class myAsyncRunnable extends AsyncTask<Void, Boolean, Void> {

    GameActivity gameactivity;

    @Override
    protected Void doInBackground(Void... params) {
        pull();
        return null;
    }

public myAsyncRunnable(GameActivity gameactivity) {
    super();
    this.gameactivity = gameactivity;
}


    public void pull() {

        final ImageView image3 = (ImageView) gameactivity.findViewById(R.id.imageView3);
        final int drawables[] = new int[] {R.drawable.pull2,R.drawable.pull3,R.drawable.pull4,R.drawable.pull5,R.drawable.pull6,R.drawable.pull7};
        Runnable runnable = new Runnable() {

            @Override
            public void run() {
                for (int i=0;i<drawables.length;i++) {
                    image3.setImageResource(drawables[i]);
                    gameactivity.handler.postDelayed(this, 500);
                    Log.w("asyncrunnable","run"+i);
                }

            }

        };
        gameactivity.handler.post(runnable);
    }
}
4

1 に答える 1

1

このようなアニメーションを実行するために、10個のImageViewを作成しないでください。

1つのImageViewだけで十分です。ハンドラーを使用して、setImagexミリ秒程度ごとの任意のフレーバーを使用してイメージを更新します。

配列の画像と整数の現在の画像を初期化します。

int drawables[] = new int[] {R.drawable.image1, R.drawable.image2, ...};
int mCurrent = 0;

次に、アップデータを初期化します。

 Runnable runnable = new Runnable() {

    @Override
    public void run() {
                 if(mCurrent>=drawables.length)mCurrent=0;
                 imageView.setImageResource(drawables[mCurrent]);
                 mHandler.postDelayed(this, 3000); //every 3 seconds
    }
};

最後に、開始する場合は、ランナブルを投稿するだけです。

mHandler.post(runnable);

あなたのコードは間違っています:

このプル関数を試してください(コードスタイル全体を実際に承認するわけではありませんが、修正する時間はありません)

public void pull() {

    final ImageView image3 = (ImageView) gameactivity.findViewById(R.id.imageView3);
    final int drawables[] = new int[] {R.drawable.pull2,R.drawable.pull3,R.drawable.pull4,R.drawable.pull5,R.drawable.pull6,R.drawable.pull7};
            for (int i=0;i<drawables.length;i++) {
                final int j = i;
    Runnable runnable = new Runnable() {

        @Override
        public void run() {
                image3.setImageResource(drawables[j]);

        }

    };
                gameactivity.handler.postDelayed(this, 500 * i);
                Log.w("asyncrunnable","run"+i);
            }
}

}

于 2013-02-04T13:39:01.727 に答える