Как запустить и остановить анимацию вращающегося ImageView с помощью кнопки - PullRequest
0 голосов
/ 24 марта 2019

Я хочу нажать кнопку воспроизведения, а затем вращать диск: imageRound. Во время паузы я хочу остановить диск в текущей позиции, а затем продолжить воспроизведение с текущей позиции.

Я пытаюсь каждый раз получать угол с imageRound.getRotation(), но каждый раз он возвращается к 0. Мой код выглядит следующим образом:

playButton.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch(event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            if (playShow) {
                                playButton.setBackgroundResource(R.drawable.play_pressed);
                            } else {
                                playButton.setBackgroundResource(R.drawable.pause_pressed);}
                            return true; //handle the touch event
                        case MotionEvent.ACTION_UP:
                            if (playShow) {
                                playButton.setBackgroundResource(R.drawable.pause_default);
                                RotateAnimation rotate = new RotateAnimation(imageRound.getRotation(), 360, Animation.RELATIVE_TO_SELF,
                                        0.5f,  Animation.RELATIVE_TO_SELF, 0.5f);
                                rotate.setDuration(5000);
                                imageRound.startAnimation(rotate);
                                playShow=false;
                            } else {
                                playButton.setBackgroundResource(R.drawable.play_default);
                                imageRound.setRotation(imageRound.getRotation()); //(Not working) Set angle and stop animation
                                imageRound.clearAnimation();
                                playShow=true;
                            }
                            return true; // handle the touch event
                    }
                    return false;
                }
            });

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Возвращает ли imageRound.getRotation() 0 каждый раз?RotateAnimation не меняет свойства представления.Использовать ObjectAnimator.ofFloat(imageview ,"rotation", 0f, 360f) Это напрямую изменяет свойство поворота представления.

0 голосов
/ 24 марта 2019

С помощью SanthoshKumar это полностью рабочий код, который добивается цели в моем случае:

playButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        if (playShow) {
                            playButton.setBackgroundResource(R.drawable.play_pressed);
                        } else {
                            playButton.setBackgroundResource(R.drawable.pause_pressed);
                        }
                        return true; //handle the touch event
                    case MotionEvent.ACTION_UP:
                        if (playShow) {
                            playButton.setBackgroundResource(R.drawable.pause_default);
                            anim = ObjectAnimator.ofFloat(imageRound, "rotation", imageRound.getRotation(), 360f);
                            anim.setDuration(20000);
                            anim.setInterpolator(new LinearInterpolator());
                            anim.start();//
                            playShow = false;
                            if (mediaPlayer != null) {
                                mediaPlayer.start();
                            }

                        } else {
                            playButton.setBackgroundResource(R.drawable.play_default);
                            anim.cancel();                             
                            playShow = true;
                            if (mediaPlayer != null) {
                                mediaPlayer.pause();
                            }

                        }
                        return true; // handle the touch event
                }
                return false;
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...