1

誰かがスレッド上のボタンを回転させるためのサンプル実装を提供できますか? 現在、次のコードを使用して UI スレッドでボタンを回転させています。

Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(),
                    R.anim.rotation);
                buttonRotate.setAnimation(ranim);
4

3 に答える 3

0

UIスレッド定義で

Handler mainHandler = new Handler();

次に、スレッド内でこれを使用します。

mainHandler.post(new Runnable()
{
    public void run()
    {
       //your piece of code
    }
});

これまでのところ、いくつかのケースで役に立ちました。あなたにも役立つことを願っています! :D

編集:

mainHandler.post(new Runnable()
{
    public void run()
    {
            while(someBoolean==true)
            {
                //your piece of code
            }
    }
});

ハンドラーで行ったのと同じように、クラス内で「someBoolean」を定義した場合、スレッドはそれを取得するはずです。
このように、データを処理した後、someBoolean を false に設定するだけで回転が停止します。

于 2012-06-20T21:49:47.910 に答える
0

以下はあなたのために働くはずです。

Thread thread = new Thread() 
{ 
    @Override 
    public void run() { 
        try { 
                Animation ranim = (Animation) AnimationUtils.loadAnimation(getBaseContext(), 
                R.anim.rotation); 
                buttonRotate.setAnimation(ranim); 
        } catch (InterruptedException e) { 
            e.printStackTrace(); 
        } 
    } 
}; 

thread.start(); 

最終的には、AsyncTask邪魔することなく独立して実行できるを作成する必要があるかもしれませんUI Thread

于 2012-06-20T21:50:04.317 に答える
0

残念ながら、現時点では IDE にアクセスできないため、バグのあるコードをここに置くのではなく、手順をリストします。

1) Activity を拡張する同じクラスに「AnimationListener」を実装します。2) ボタンにクリック リスナーを設定します。3) AsyncTask クラスを作成します。4) (AsyncTask の) doInBackground をオーバーライドし、リソースを集中的に使用するロジックをそこに配置します。5) (AnimationListener の) onAnimationStart で、AsyncTask を呼び出すロジックを実装します。つまり、new MyTask().execute(); 6) アニメーションを定義し、ボタンに設定します。

ボタンをクリックすると、onAnimationStart が呼び出され、AsyncTask ロジックとアニメーションの両方が開始されます。このようにして、バックグラウンド スレッドがリソースを大量に消費する操作を実行しているのと同じように、つまり同時にボタンを回転させることができます。

楽しみのために、バックグラウンド タスクが完了する前にボタンが再度クリックされないようにすることができます。

コードが不足していて申し訳ありませんが、ここからはかなり簡単です。

于 2012-06-20T22:33:15.737 に答える