TranslateAnimation не работает, как ожидалось - PullRequest
3 голосов
/ 13 января 2012

Я хотел переместить линейный макет с помощью TranslateAnimation.У меня 2 проблемы.Мой базовый SDK - это Android 2.2.

  1. Даже после завершения анимации сенсорная область в линейном макете вообще не перемещалась.
  2. Экран мигал пару кадровсразу после завершения анимации.

Сначала я не использовал AnimationListener и LinearLayout.layout ().Когда я закончил анимацию, используя следующий код, положение представления действительно изменилось.Но казалось, что сенсорная область не перемещалась с видом во время анимации.В результате, когда я попытался нажать на любую из кнопок в представлении после анимации, ничего не произошло.Если я щелкнул исходную область кнопок (исходную область до начала анимации), был активирован on_click_listener.

Затем я удалил эту строку кода,

tmpAnimation.setFillAfter(true);

и попытался AnimationListener и LinearLayout.layout () .Это помогло и решило 1-ую проблему.

Но возникла проблема 2.После анимации некоторые из моих линейных макетов будут мигать пару кадров, а затем вернуться к порядку.

Я пытался midLinearlayout.requestLayout () , это не работает. Я пытался реализовать Animation.AnimationListener и переопределить onAnimationEnd, как кто-то сказал, но это тоже не работает.

TranslateAnimation tmpAnimation = new TranslateAnimation(midLinearlayout.getLeft(),midLinearlayout.getLeft(),midLinearlayout.getTop(),midLinearlayout.getTop()+100);

//tmpAnimation.setFillAfter(true);

tmpAnimation.setDuration(2000);
tmpAnimation.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        //To change body of implemented methods use File | Settings | File Templates.
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        Log.v("onflingTest","top="+midLinearlayout.getTop()+" left="+midLinearlayout.getLeft()+" right" + midLinearlayout.getRight());
                        midLinearlayout.layout(midLinearlayout.getLeft(), midLinearlayout.getTop()+100, midLinearlayout.getLeft() + midLinearlayout.getMeasuredWidth(), midLinearlayout.getTop()+ 100 + midLinearlayout.getMeasuredHeight());                            
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                        //To change body of implemented methods use File | Settings | File Templates.
                    }
                });

Я решил это с помощью кода ниже:

linearlayout.clearAnimation();

см. Ссылку: EditText зависает после анимации и снова возвращается при прокрутке ......

1 Ответ

1 голос
/ 13 января 2012

Я решил проблему с помощью поста View.GONE в анимации завершена

Проблема в том, что после компоновки B анимация завершена, я пропустил состояние представления как View.УШЕЛ.Добавление View.GONE вернуло элементы управления.

...