Как я могу применить изменения к позиции представления после анимации?
Я применил TranslateAnimation к EditText с FillAfter=true, чтобы сохранить его положение в конце анимации. Анимация работает правильно, но проблема в том, что я больше не могу войти в текст редактирования. Я думаю, что это связано с тем, что анимация влияет только на рендеринг без изменения фактических координат вида.
Есть ли возможность сохранить окончательные координаты с нормально работающим текстом редактирования?
Спасибо Даниэле
1 ответ
К сожалению, анимация отображает только необработанные пиксели анимированного элемента, но не его положение "андроид-интерна". Лучшее решение (которое я могу придумать) - это использовать AnimationListener и правильно установить положение анимированного элемента после завершения анимации. Вот мой код для слайда В поисковой оболочке:
public void toggleSearchWrapper() {
AnimationSet set = new AnimationSet(true);
// slideDown Animation
Animation animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f
);
animation.setDuration(300);
animation.setFillEnabled(false);
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(final Animation anim) {
};
@Override
public void onAnimationRepeat(final Animation anim) {
};
@Override
public void onAnimationEnd(final Animation anim) {
// clear animation to prevent flicker
searchWrapper.clearAnimation();
// set new "real" position of wrapper
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, R.id.branchFinderIncludeHeader);
searchWrapper.setLayoutParams(lp);
}
});
set.addAnimation(animation);
// set and start animation
searchWrapper.startAnimation(animation);
}