2016-12-16 3 views
0

Я разрабатываю приложение для Android, и мне удалось разместить некоторые изображения на Activity и оживить их. Но затем, когда я пытаюсь активировать анимацию, я обнаружил, что onClickListener не отключен. Я попытался сделать некоторые исследования и попытался добавить адаптер прослушивателя анимации и переопределить методы onAnimationStart()/onAnimationEnd(), чтобы попытаться отключить onClickLister, установив его null, за исключением того, что он не работал, и после некоторой отладки я обнаружил, что это похоже на два метода не называются.Отключение onClickListener во время анимации продолжается

Вот некоторые из моих кодов:

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); 
} 
} 

Как вы можете видеть, что я пытался взывать журналы в обоих onAnimationStart() и onAnimationEnd() метод, я понял, что эти журналы не появляются. Я не уверен, что случилось, что мои коды не работают.

Помогите? Заранее спасибо.

ответ

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); 

взгляд на этот пример для startAnimation() вам нужно передать экземпляр animation.But в своем коде вы просто мимо точки зрения, так где же ваша анимация? поэтому onAnimationStart не работает.

вам не нужно делать это так, но я думаю, что вы сделали что-то двигаться, к тому, что вы можете создать этот экземпляр анимации, передать, что startAnimation()

+0

Спасибо! Я изменил код и создал «AnimationListener» вместо «AnimatiorListenerAdapter». Хотя я могу спросить, что такое «AnimatorListenerAdapter»? Я видел некоторых людей, использующих 'View.animator(). SetListener (AnimatorListenerAdapter a)', чтобы помещать 'AnimatorListenerAdapter' в экземпляр анимации (?) Представления и реализует там' onAnimationStart' и 'onAnimationEnd'. –

Смежные вопросы