Страницы

Поиск по вопросам

пятница, 7 февраля 2020 г.

Как сделать, чтобы анимация не останавливалась

#java #android


Есть такая анимация:

android:duration="100"
android:fillBefore="false"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:toXScale="0.9"
android:interpolator="@android:anim/decelerate_interpolator"
android:toYScale="0.9" />


Как работает: объект сначала уменьшается,а потом возвращается в исходное состояние.
(объект-ImageView)  

В коде обращаюсь так:

anim= AnimationUtils.loadAnimation(getContext(),R.anim.clickbutton);


и вызываю так:

public boolean onTouch(View v, MotionEvent event) {

           v.startAnimation(anim);
 switch (v.getId()) {
        case R.id.b1:
    {
           stopPlayerIfNeeded();
          playSample(soundsRawResIds[0]);
                        }
      break;


Все работает как часы, но хотелось бы, чтобы после нажатия анимация "постоянно работала"
т.е нажал я на case R.id.b1 - выполнилось действие, но анимация продолжала работать
до того момента, пока не выбрал другой R.id.* и т.к далее

/////////////////////////////////////////
как в этом случае остановить анимацию?сейчас так: 
выбрал R.id.b1: все запустилось и работает, выбрал R.id.b2: запустилась анимация
но и на R.id.b1: продолжает выполняться анимация,а нужно остановить 

for (int j = 0; j < arr_imageB.length; j++) {
arr_imageB[j].setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

v.startAnimation(anim);
    switch (v.getId()) {
    case R.id.b1:
    {

            stopPlayerIfNeeded();
            playSample(soundsRawResIds[0]);

         }

    break;
case R.id.b2:

{
            stopPlayerIfNeeded();
            playSample(soundsRawResIds[1]);

        }

    break;
case R.id.b3:
{
            stopPlayerIfNeeded();
            playSample(soundsRawResIds[2]);

        }

    break;
case R.id.b4:
{
            stopPlayerIfNeeded();
            playSample(soundsRawResIds[3]);
         }

    break;
case R.id.b5: {
    stopPlayerIfNeeded();
    playSample(soundsRawResIds[4]);
}
    break;
case R.id.b6: {
    stopPlayerIfNeeded();
    playSample(soundsRawResIds[5]);

}

    break;
case R.id.b7:
{
            stopPlayerIfNeeded();
            playSample(soundsRawResIds[6]);

        }
    break;
}

    


Ответы

Ответ 1



Если анимация лежит в то атрибут android:repeatCount="infinite" должен работать

Ответ 2



Повесьте слушатель окончания анимации и в нём ещё раз её проиграйте, снова повесив слушатель: View viewToAnimate = ...; final int animResId = R.anim.anim_file; Animation anim = AnimationUtils.loadAnimation(ctx, animResId); anim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationEnd(Animation arg0) { Animation anim = AnimationUtils.loadAnimation(ctx, animResId); anim.setAnimationListener(this); viewToAnimate.startAnimation(anim); } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationStart(Animation arg0) { } }); viewToAnimate.startAnimation(anim); Так она будет повторяться ~бесконечно.

Ответ 3



Бесконечная анимация anim.setRepeatCount(-1); Остановка анимации v.getAnimation().setRepeatCount(0);

Комментариев нет:

Отправить комментарий