2016-12-16 3 views
0

私はAndroidアプリを開発しています。Activityにいくつかの画像を入れてアニメーション化することに成功しました。しかし、アニメーションをアクティブにしようとすると、onClickListenerが無効になっていないことがわかりました。私はいくつかの研究を行うことを試み、それが動作しませんでし除き、それをヌルを設定することにより、onClickListerを無効にしようとするアニメーションリスナーアダプタを追加し、onAnimationStart()/onAnimationEnd()メソッドをオーバーライドしようとしたいくつかのデバッグの後、私はそれはのように思えることがわかりました2つのメソッドは呼び出されません。ここでアニメーションが進行中のときにonClickListenerを設定解除する

は、私のコードの一部です:あなたは、私は両方onAnimationStart()onAnimationEnd()方法でログを呼び出すしようとした見ることができるように

public class MainActivity extends AppCompatActivity { 

//Skipped some of the variables declarations 

private class AnimListAdapt extends AnimatorListenerAdapter{ 

    @Override 
    public void onAnimationStart(Animator animation) { 
     onClickPointer = null; 
     Log.i("Animation","Animation starts"); 
     super.onAnimationStart(animation); 
    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     Log.i("Animation","Animation ends"); 
     super.onAnimationEnd(animation); 
     onClickPointer = onClickObject; 
    } 

}; 

private AnimListAdapt animListAdapt; 
private View.OnClickListener onClickPointer; 
private View.OnClickListener onClickObject; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //Skipped some of the variable assignments 
    onClickObject = new View.OnClickListener() { 
     public void onClick(View view) { 
      check((ImageView) view); 
     } 
    }; 

    onClickPointer = onClickObject; 
    animListAdapt = new AnimListAdapt(); 

    img1View = (ImageView) findViewById (R.id.img1View); 
    grids[4] = img1View; 
    img1View.setOnClickListener(onClickPointer); 

    img2View = (ImageView) findViewById (R.id.img2View); 
    grids[4] = img2View; 
    img2View.setOnClickListener(onClickPointer); 
} 
public void check (ImageView view) { 
    int move; 
if ((previous == null) || ((move = move(findGridNum(previous), findGridNum(view))) == NONE)) { 
     if (previous == view) { 
      view.setImageResource(android.R.color.transparent); 
      previous = null; 
     } else { 
      if (previous !=null) { 
       previous.setImageResource(android.R.color.transparent); 
      } 
      previous = view; 
      view.setImageResource(R.drawable.crush_frame_tran); 
     } 
    } else { 
     previous.setImageResource(android.R.color.transparent); 
     switch (move) { 
      case UP: { 
       Log.i("moveCheck", "Up"); 
       animListAdapt.setUpAdapter(view); 
       view.animate() 
         .setListener(animListAdapt); 
       go_up(previous); 
       go_down(view); 
       break; 
      } 
      case DOWN: { 
       Log.i("moveCheck", "Down"); 
       animListAdapt.setUpAdapter(view); 
       view.animate() 
         .setListener(animListAdapt); 
       go_down(previous); 
       go_up(view); 
       break; 
      } 
      case LEFT: { 
       go_left(previous); 
       animListAdapt.setUpAdapter(view); 
       view.animate() 
         .setListener(animListAdapt); 
       go_right(view); 
       break; 
      } 
      case RIGHT: { 
       go_right(previous); 
       animListAdapt.setUpAdapter(view); 
       view.animate() 
         .setListener(animListAdapt); 
       go_left(view); 
      } 
     } 
     previous = null; 
    } 
} 
public void go_right (View view) { 
    view.startAnimation(to_right); 
} 
public void go_left (View view) { 
    view.startAnimation(to_left); 
} 
public void go_up (View view) { 
    view.startAnimation(to_up); 
} 
public void go_down (View view) { 
    view.startAnimation(to_down); 
} 
} 

、私はそれらのログが表示されないことを考え出しました。私のコードがうまくいかず、何が間違っているのか分かりません。

助けてください?前もって感謝します。

答えて

0
mToolbar = mPopupContents.findViewById(R.web.toolbar); 
TranslateAnimation anim = 
    new TranslateAnimation(0, 0, -60, 0); 
anim.setDuration(1000); 
anim.setAnimationListener(new Animation.AnimationListener() { 
     public void onAnimationStart(Animation a) { 
      Log.d(LOGTAG, "---- animation start listener called" ); 
     } 
     public void onAnimationRepeat(Animation a) {} 
     public void onAnimationEnd(Animation a) { 
      Log.d(LOGTAG, "---- animation end listener called" ); 
     } 
    }); 
mToolbar.startAnimation(anim); 

あなただけのビューを超えて、あなたのコード内でanimation.Butのインスタンスを渡す必要がありstartAnimation()ため、この例を見て、だからここであなたのアニメーションがありますか?そのため、onAnimationStartは機能しません。

あなたはこのようにそれを行う必要はありませんが、私は、あなたがそのアニメーションのインスタンスを作成する可能性があることを、startAnimation()

+0

おかげにそれを渡すために、何かを動かしたと思います!私はコードを変更し、 'AnimatiorListenerAdapter'の代わりに' AnimationListener'を作成しました。 「AnimatorListenerAdapter」は何ですか?私は、ビューの(?)(AnimatorListenerAdapter a)は 'アニメーションインスタンスに' AnimatorListenerAdapter'を入れてsetListener。 'View.animator()を使用して、何人かの人々を見て、そこに' onAnimationStart'と 'onAnimationEnd'を実装しました。 –

関連する問題