Два просмотра, одна анимация, но есть проблема - PullRequest
0 голосов
/ 23 апреля 2020

Это мой код:

AlphaAnimation anim_fadeIn;
Button button, button2;
TextView t, e;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    t = findViewById(R.id.text_Splash_t);
    e = findViewById(R.id.text_Splash_e);

    button = findViewById(R.id.button);
    button2 =  findViewById(R.id.button2);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mAnimate();
        }
    });
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mAnimate2();
        }
    });

    anim_fadeIn = new AlphaAnimation(0.0f, 1.0f);
    anim_fadeIn.setDuration(1000);
    anim_fadeIn.setFillAfter(true);



 private void mAnimate() {
            t.startAnimation(anim_fadeIn);
}



private void mAnimate2() {
            e.startAnimation(anim_fadeIn);
}

Сценарий:

нажмите кнопку 1, и текст1 будет анимирован (даже если вы делаете это несколько раз). Затем нажатие кнопки 2 добавит представление куда-нибудь, поэтому независимо от того, нажмете ли вы кнопку 1 или 2, оба текста оживят

Сценарий 2:

нажмите кнопку 2, а текст2 оживит (даже если вы это сделаете несколько раз). Затем нажатие кнопки 1 добавит представление куда-либо, поэтому независимо от того, нажмете ли вы кнопку 1 или 2, оба текста будут анимированы.

Как избежать этой проблемы

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

На самом деле вы регистрируете одну и ту же анимацию в двух представлениях. Если вы хотите одновременно анимировать только один вид, вам нужно сначала очистить анимацию для другого вида, иначе запустятся оба. Например,

private void mAnimate() {
    e.clearAnimation();
    t.startAnimation(anim_fadeIn);
}



private void mAnimate2() {
    t.clearAnimation();
    e.startAnimation(anim_fadeIn);
}
0 голосов
/ 23 апреля 2020

Удалите перенос нового потока, просто вызовите mAnimate () или mAnimate2 () в основном потоке следующим образом:

...
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mAnimate();
        }
    });
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           mAnimate2();
        }
    });
...

Также mAnimate, mAnimate2 можно оптимизировать следующим образом:

private void mAnimate() {
    t.startAnimation(anim_fadeIn);
}



private void mAnimate2() {
    e.startAnimation(anim_fadeIn);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...