Бесконечный цикл последовательной анимации ImageButton - PullRequest
0 голосов
/ 08 июня 2019

Я новичок в Android Studio и хочу анимировать кнопку image с последовательным набором анимации.Набор анимации (animation_boutons.xml) находится в res / anim.Я пробовал с animationSet в Java, но приложение зависало каждый раз, когда я запускал эмулятор.Я долго искал решение.Я надеюсь, что кто-то может помочь мне !Я прошу прощения, если это что-то очевидное.

Java-код:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        configureCodeurBouton();
    }
    private void configureCodeurBouton() {
        ImageButton boutonCodeur = findViewById(R.id.boutoncodeur);
        Animation animBoutons = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_boutons);
        animBoutons.setRepeatCount(Animation.INFINITE);
        boutonCodeur.setAnimation(animBoutons);
        boutonCodeur.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this, codeur.class));
            }
        });
    }
}

XML-код:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="true"
    android:fillAfter="true">

    <rotate

        android:fromDegrees="0"
        android:toDegrees="20"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="0"
        android:duration="1000"
        />

    <rotate
        android:startOffset="1000"
        android:fromDegrees="20"
        android:toDegrees="-20"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000"
        />

    <rotate

        android:fromDegrees="-20"
        android:toDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="3000"
        android:duration="1000"
        />

</set>

Также, Vedprakash Wagh дать мне совет попробовать animBoutons.setRepeatCount(Animation.INFINITE), но это не имеет никакого эффекта).

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Мне просто нужно было изменить весь файл xml anim_boutons, чтобы у меня была только одна анимация, а не три анимации поворота. строка repeatMode говорит, что нужно повторять анимацию в обратном направлении при каждом повторении. Это дает ожидаемый эффект.

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="true"
    android:fillAfter="true">

    <rotate

        android:fromDegrees="-20"
        android:toDegrees="20"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="0"
        android:duration="1000"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
    />

</set>
0 голосов
/ 09 июня 2019

Ваше приложение каждый раз падает, потому что вы пытаетесь найти ImageButton при первом создании класса, а не после установки макета.

Вы получаете NullPointerException, поскольку в вашей иерархии просмотра нет ImageButton с идентификатором R.id.boutoncodeur, когда вы пытаетесь его найти.

Вам нужно найти ваш ImageView ПОСЛЕ , который доступен в вашей иерархии просмотра, т.е. после setContentView();

Вы можете сделать это:

  1. Удалить вторую строку

    ImageButton boutonCodeur = findViewById(R.id.boutoncodeur);
    

    , поскольку вы уже нашли ImageView в функции configureCodeurButton().

  2. Или вы можете оставить одну переменную класса ImageView и сделать findViewById вызов после setContentView, как показано ниже.

    public class MainActivity extends AppCompatActivity {
    ImageButton boutonCodeur;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        boutonCodeur = findViewById(R.id.boutoncodeur);
        configureCodeurBouton();
    }
    private void configureCodeurBouton() {
        Animation animBoutons = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.anim_boutons);
        boutonCodeur.setAnimation(animBoutons);
        boutonCodeur.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this, codeur.class));
            }
        });
    }
    }
    

Подробнее о NullPointerException можно узнать здесь . Кроме того, узнайте, как читать ошибки из доступных руководств. Или просто откройте вкладку logcat в Android Studio при возникновении ошибки, чтобы узнать, какую ошибку вы получаете.

  1. Чтобы анимация работала бесконечно, вы можете добавить это в свой код.

animation.setRepeatCount (Animation.INFINITE)

...