2017-04-10 5 views
0

私はアニメーションを作成していますが、私はクリーナーコードのために別様にOnClickListenerを実装したいと思います。アクティビティからビューを抽出し、OnClickListener内にアニメーションを実装します

たとえば、これを行うことができます。

注:active[0]true

MainActivity

final Boolean[] active = {false}; 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(active[0]){ 
       // do some work 
      }else{ 
       Animation animPictureDeactiveLeft = AnimationUtils.loadAnimation(MainActivity.this, R.anim.deactivate_picturebtn_onleft); 
       Animation animVideoMiniLeft = AnimationUtils.loadAnimation(MainActivity.this, R.anim.activate_videobtn_onleft); 
       Animation animGifMiniLeft = AnimationUtils.loadAnimation(MainActivity.this, R.anim.move_gifbtn_onleft); 

       ImageView btnCameraPic = (ImageView) findViewById(R.id.btnCapturePicture); 
       ImageView btnCameraVid = (ImageView) findViewById(R.id.btnCaptureVideo); 
       ImageView btnCameraGif = (ImageView) findViewById(R.id.btnCaptureGif); 

       btnCameraPic.startAnimation(animPictureDeactiveLeft); 
       btnCameraVid.startAnimation(animVideoMiniLeft); 
       btnCameraGif.startAnimation(animGifMiniLeft); 
       active[0] = true; 
      } 
     } 
    }); 

このコードは正常に動作します。しかし、私はこのコードのスタイルが好きではない場合にのみ、私は自分の仕事を実行したいです。
他にもOnClickListenerを実装したいと思います。

私は以下を試しましたが、これが良い方法であるかどうかわかりません。
そうでない場合は、私に何が最善の方法であるか教えてください。

TestClick

public class TestClick extends AppCompatActivity implements OnClickListener { 
public static boolean bActive = false; 
@Override 
public void onClick(View v) { 
    if(bActive) { 
     active(); 
    }else{ 
     Animation animPictureDeactiveLeft = AnimationUtils.loadAnimation(TestClick.this, R.anim.deactivate_picturebtn_onleft); 
     Animation animVideoMiniLeft = AnimationUtils.loadAnimation(TestClick.this, R.anim.activate_videobtn_onleft); 
     Animation animGifMiniLeft = AnimationUtils.loadAnimation(TestClick.this, R.anim.move_gifbtn_onleft); 

     ImageView btnCameraPic = (ImageView) findViewById(R.id.btnCapturePicture); 
     ImageView btnCameraVid = (ImageView) findViewById(R.id.btnCaptureVideo); 
     ImageView btnCameraGif = (ImageView) findViewById(R.id.btnCaptureGif); 

     btnCameraPic.startAnimation(animPictureDeactiveLeft); 
     btnCameraVid.startAnimation(animVideoMiniLeft); 
     btnCameraGif.startAnimation(animGifMiniLeft); 
     bActive = true; 
    } 
} 

public void active(){ 

} 

} 

MainActivity

 button.setOnClickListener(new TestClick(){ 
     public void active(){ 
      // do some work 
     } 
    }); 

答えて

0

あなたはTestClick extends AppCompatActivityを持っている場合、これは間違っています。

button.setOnClickListener(new TestClick(){ 
    public void active(){ 
     // do some work 
    } 
}); 

never newアクティビティ


インターフェイスを実装するアクティビティがある場合。

public class TestClick extends AppCompatActivity implements OnClickListener 

次にこれは、あなたが(ボタンを仮定すると、現在のTestClickクラスである)、それを使用する方法です。 thisクラス内

button.setOnClickListener(TestClick.this); 

そしてオーバーライドonClickその後、呼び出されます。それは本当に活動ない場合


それともTestClickAppCompatActivityを拡張するべきではありません。

その場合、あなたは完全な活動、単純なクラスをいないしたいと思う

また、おそらく、クリックされたボタンをチェックすることをお勧めします。

public class TestClick implements OnClickListener { 
    private boolean bActive; 
    private final Context mContext; 

    public TestClick(Context context) { 
     this.mContext = context; 
    } 

    public void setActive(boolean active) { this.bActive = active; } 
    public boolean isActive() { return this.bActive; } 

    @Override 
    public void onClick(View v) { 
     if (v.getId() == R.id.your_button_id) { 
      if (this.isActive()) { 

      } else { 

      } 
     } 

そしてあなたは

button.setOnClickListener(new TestClick(MainActivity.this)); 

そしてノートを使用することができます:findViewByIdは、ここでは解決できないので、あなたのビューを参照する別の方法を取得する必要があります。

+0

@ cricket007どこのアニメーションを実装しますか? 'TestClick'または' MainActivity'の中で –

+0

'TestClick'は' onCreate'メソッドを持っていません。 'findViewById'は失敗するので、そこにアニメーションを行うことはできません。だから 'MainActivity ...View.OnClickListener'を実装します –

+0

@ cricket007私の主な目的は、別のクラスファイルでアニメーションコードを整理することです。 'clickListener'でアニメーションを管理できない場合、' MainActivity'に 'OnClickListener'を実装する必要はありません。 –

関連する問題