1

フレーム アニメーションをエミュレートしています。私はそれがすべて1つの問題を除いて機能しています。すべての反復で、遅延後に ImageView のイメージを変更する for ループがあります。

for(int i = 1; i <13; i++){
            if (stop== false){
                String imgName = "b"+ Integer.toString(i);
                  id = getResources().getIdentifier(imgName, "drawable", getPackageName());
                Handler handlerTimer = new Handler();
                handlerTimer.postDelayed(new Runnable(){
                    public void run() {
                       view.setImageDrawable((getResources().getDrawable(id)));            
                  }}, 300);

            }
        }

問題は、run() が反復ごとに更新されないことです。一度だけ機能します。

新しい run() を更新または作成するにはどうすればよいですか?

私はこれを行う他の方法を受け入れます。

アドバイスをいただければ幸いです。

4

2 に答える 2

1

ステップ #1: をRunnableアクティビティのデータ メンバーとして定義します (またはこのコードが存在する場所)。

ステップ #2:Handler必要がないのでダンプします --postDelayed()にも実装されViewています

ステップ #3: 呼び出しを行うヘルパー メソッドを作成します -- ここpostDelayed()ではそのメソッドを参照しfoo()ます -- そして、呼び出しfoo()てはいけない場所で呼び出しますpostDelayed()

ステップ #4:run()で、もう一度Runnable電話して、別の遅延期間のスケジュールを変更しますfoo()Runnable

于 2011-07-05T23:13:03.610 に答える
0

これを試してみてください。うまくいかない場合は、他のことを試してください。

for(int i = 1; i <13; i++)
{
    if (stop== false)
    {
        String imgName = "b"+ Integer.toString(i);
        id = getResources().getIdentifier(imgName, "drawable", getPackageName());
        Handler handlerTimer = new Handler();
        handlerTimer.postDelayed(new Runnable(){
            public void run() {
                view.setImageDrawable((getResources().getDrawable(id)));
                view.invalidate();            
                }}, 300);

    }
}

invalidate() によってビューが再描画され、目的の効果が得られるはずです。お役に立てれば!

これはスレッドの例です:

public class Main implements Runnable
{
    public Main()
    {
        Thread thread = new Thread(this);
        thread.start();
        //new Thread starts at run()
    }

    public void run()
    {
        String imgName = "b"+ Integer.toString(i);
        id = getResources().getIdentifier(imgName, "drawable", getPackageName());
        try
        {
            for(int i = 1; i <13&!stop; i++)
            {
                view.setImageDrawable((getResources().getDrawable(id)));
                Thread.sleep(300);
            }
        }catch(Exception e){e.printStackTrace();}
    }

    public static void main(String args[]){new Main();}
}

他に何か必要な場合は、お知らせください。

于 2011-07-05T23:12:17.237 に答える