2011-12-20 7 views
0

私の主な活動では、私は、テキスト "再生"とボタンがあります。テキストを徐々に成長させ、徐々にサイズを小さくしたい。これは、ボタンがクリックされるまで繰り返されます。この効果は穏やかな輝きのように見えるはずです。Androidでスレッドを使用してカスタムボタンビューのアニメーション効果を作成しますか?

だから、私はこれを達成するためのスレッドを使用して試してみました:それは今、私はそれを持っているとして働いていないが、

playAnimation.start(); 

// Play Button Animation Thread 
Thread playAnimation = new Thread() { 
    public void run() { 
     try { 
      int textSize = 25; 
      while (textSize <= 50) { 
       playBtn.setTextSize(textSize); 
       textSize += .10; 
       sleep(100); 
      } 
     } 

     catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     finally { 

     } 

    } 
}; 

その後、私は、スレッドと呼ばれますおそらくもっと良い方法があると思っています。どんな助けもありがとうございます。

答えて

1

は、あなたが書いたコードで間違ったカップルの事があります。

  1. あなたはintとしてあなたtextSize変数を宣言しました。したがって、各操作の後に値がintにキャストされ、追加したばかりの値が削除されるため(つまり、25 + = 0.1 - > 25.1、int型にキャストされるため)、値を0.1ずつインクリメントする試みは無駄です。 > 25 ...泡立て、リンスリピート)。したがって、あなたはsetTextSize()に渡す値は決して実際には変わりません。
  2. コードは繰り返しません。そのループは、値が50に達するまで1回だけ実行され、その後停止します。あなたはあなたが行っている前後の効果を得ることはありません。
  3. メイン/レンダリングスレッドでUIに対する更新が常に発生する必要があります。作成したスレッドから更新メソッド(setTextSize()など)を決して呼び出さないでください。これは、Handlerを使用してスレッドを管理することで解決できます。

あなたがアニメーション化する全体ボタンをしたい場合は、他の人のようなアニメーションフレームワークを見ることができます示唆しています。しかし、を自動化するには、のテキストサイズを使用してください。正しいパスには.​​..私達はちょうど私は上記の点に基づいて、あなたのコードを微調整する必要があります。

Handler mHandler = new Handler(); 
boolean mReverse = false; 
Runnable mUpdate = new Runnable() { 
    @Override 
    public void run() { 
    float current = playBtn.getTextSize(); 
    if(mReverse) { 
     current -= 0.1; 
     playBtn.setTextSize(current); 
     mReverse = (current <= 25); 
    } else { 
     current += 0.1; 
     playBtn.setTextSize(current); 
     mReverse = (current >= 50); 
    } 

    mHandler.postDelayed(mUpdate, 100); 
    } 
} 

Handlerは、メインスレッド上で作成され、Runnable内のすべてのコードは、メインスレッド上で実行されています...そうあなたが更新することができます。そこのUI。 postDelayed()は待機遅延を処理するので、別のスレッドを作成する必要はありません。アニメーションを開始するには、コードのどこにでも

mHandler.postDelayed(mUpdate, 100); 

と電話するだけです。いつでもアニメーションを停止するには、各繰り返しの後にpostDelayedを呼び出してください。

HTH!

0

アンドロイドでanimationsを探してください - 簡単な効果を作成するには、これが最善の方法です。

あなたについては、メイン・スレッドからのコード変更のみが許可されているので、アニメーション用に別のスレッドを作成することはできません。

1

アニメーションリソースを使用して上記のタスクを実行できます。

  1. アニメーションリソースファイル(anim_play.xml)を作成し、res/animフォルダに配置する必要があります。

    <?xml version="1.0" encoding="utf-8"?> 
        <scale xmlns:android="http://schemas.android.com/apk/res/android" 
        android:duration="1000" 
        android:repeatCount="infinite" 
        android:fromXScale="1.0" 
        android:fromYScale="1.0" 
        android:toXScale="1.2" 
        android:toYScale="1.2" > 
        </scale> 
    
  2. アニメーションを特定のビューに設定します。

    play_btn = (Button) findViewById(R.id.btn_play); 
    playAnim = AnimationUtils.loadAnimation(this, R.anim.anim_play); 
    play_btn.startAnimation(playAnim); 
    
  3. ユーザーがボタンをクリックしたときにアニメーションを削除します。

    play_btn.setOnClickListener(new OnClickListener() { 
    
        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         play_btn.clearAnimation(); 
        } 
    }); 
    
関連する問題