TranslateAnimation не работает, как ожидалось
Я хотел переместить линейный макет с помощью TranslateAnimation. У меня 2 проблемы. Мой базовый SDK - это Android 2.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 ответ
Я решил проблему с помощью поста View.GONE в анимации завершена
Проблема в том, что после того, как компоновка B завершит анимацию, я пропустил состояние представления как View.GONE. Добавление View.GONE вернул элементы управления.