Постоянная скорость в анимации вращения - PullRequest
0 голосов
/ 27 октября 2018

Я использую RotateAnimation для вращения ImageView до определенной степени (мой ImageView - это круг).

degree_old = degree % 360;
degree = random_sector.nextInt(3600) + 720;

Это код, который я использую для первого вращения:

final RotateAnimation rotate = new RotateAnimation(0, degree, RotateAnimation.RELATIVE_TO_SELF,
            0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
    rotate.setDuration(5000);
    rotate.setFillAfter(true);
    rotate.setRepeatCount(0);
    rotate.setRepeatMode(0);
    rotate.setInterpolator(new DecelerateInterpolator());

И этот код снова повернуть на стартовую позицию:

 final RotateAnimation rotateBack = new RotateAnimation(degree, (back_degree + degree), RotateAnimation.RELATIVE_TO_SELF,
                            0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
                    rotateBack.setDuration(3000);
                    rotateBack.setFillAfter(true);
                    rotateBack.setRepeatCount(0);
                    rotateBack.setRepeatMode(0);
                    rotateBack.setInterpolator(new LinearInterpolator());

Это работает.

Моя проблема в том, что скорость вращения не всегда одинакова. Иногда он вращается с очень высокой скоростью, а иногда - с очень низкой.

Мой вопрос: есть ли способ каждый раз иметь одинаковую скорость? Я предпочитаю, чтобы моя анимация вращалась с низкой скоростью в течение 5 секунд.

Как изменить скорость вращения?

1 Ответ

0 голосов
/ 27 октября 2018

Не уверен, если вы хотите использовать только RotateAnimation.

Следующий код будет поворачивать изображение на 360 градусов и обратно очень плавно. Очевидно, вы можете настроить этот код так, чтобы он включал ваш генератор случайных чисел.

public class MainActivity extends AppCompatActivity {

ImageView my_image;

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

    my_image = findViewById(R.id.my_image);
    animate_it();
}

private void animate_it() {
    my_image.setRotation(0);
    my_image.animate().rotation(360).setDuration(5000).setListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            my_image.animate().rotation(0).setDuration(5000);
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...