Как мне получить координаты вида во время анимации Android

#java #android #animation

#java #Android #Анимация

Вопрос:

это всего лишь методы, которые я могу переопределить во время AnimationListener. http://developer.android.com/reference/android/view/animation/Animation .AnimationListener.html

 Animation animation

animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.device_box);

animation.setAnimationListener(new AnimationListener(){
        @Overridepublic void onAnimationEnd(Animation arg0) {}
        @Override public void onAnimationRepeat(Animation animation) {}
        @Override public void onAnimationStart(Animation animation) {}});
  

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

В этом случае мне нужно больше исследовать кнопки

Что вы думаете по этому поводу, есть ли другой способ достичь того, чего я хочу?
Это лучший способ сделать это?

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

1. Я думаю, проблема в том, как вы определяете свою анимацию. Пожалуйста, покажите код этого: Animation анимация = новая???

Ответ №1:

Я исследовал, и то, что я получил, это это, а не X и Y, но могу обрабатывать данные как получить то, что было анимировано как время.

                  ObjectAnimator anim = ObjectAnimator.ofFloat(box_image, "translationX", 0 , cant);

                  anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                                @Override
                                public void onAnimationUpdate(ValueAnimator arg0) {

                                  double f = Math.round(arg0.getAnimatedFraction()*1000.0)/1000.0;
                                    Log.d("datos", "" f);
                                }
                            });
                  anim.setDuration(1000);
                  anim.start();