Анимация Android задерживается, первая анимация не работает на полную длину

У меня возникли проблемы с анимацией Android с помощью ViewAnimator.

Вот мой код (да, я знаю, что должен делать анимацию в XML, но это не проблема):

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    final ViewAnimator animator = (ViewAnimator)getActivity().findViewById(R.id.animator);
    Button next = (Button)getActivity().findViewById(R.id.buttonNext);
    Button back = (Button)getActivity().findViewById(R.id.buttonBack);
    next.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            animator.setInAnimation(inFromBottomAnimation());
            animator.setOutAnimation(outToTopAnimation());
            animator.showNext();
        }
    });
    back.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            animator.setInAnimation(inFromTopAnimation());
            animator.setOutAnimation(outToBottomAnimation());
            animator.showPrevious();
        }
    });

}

private Animation inFromBottomAnimation() {

    Animation inFromBottom = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
    Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT,  0.0f
    );
    inFromBottom.setDuration(1000);
    inFromBottom.setInterpolator(new AccelerateInterpolator());
    return inFromBottom;
}
private Animation outToTopAnimation() {
    Animation outToTop = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT, -1.0f
    );
    outToTop.setDuration(1000);
    outToTop.setInterpolator(new AccelerateInterpolator());
    return outToTop;
}

private Animation inFromTopAnimation() {
    Animation inFromTop = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
    Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT,  0.0f
    );
    inFromTop.setDuration(1000);
    inFromTop.setInterpolator(new AccelerateInterpolator());
    return inFromTop;
}
private Animation outToBottomAnimation() {
    Animation outToBottom = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  0.0f,            
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT, +1.0f
    );
    outToBottom.setDuration(1000);
    outToBottom.setInterpolator(new AccelerateInterpolator());
    return outToBottom;
}

Прежде всего, анимация задерживается. Приходится ждать полсекунды, прежде чем начнется анимация. Во-вторых, первая анимация, которая запускается в ViewAnimator, либо не запускается вообще (просто переходит к следующему представлению — после полсекунды ожидания, хотя и из-за первой проблемы), либо запускается слишком быстро, чтобы ее заметить.

Есть ли обходной путь/решение этих проблем?


person Bo A    schedule 24.04.2012    source источник
comment
Вы уверены, что порядок аргументов для TranslateAnimation правильный? Вы говорите о «левом» и «правом», но ненулевые дельты, кажется, относятся к значениям Y.   -  person Lawrence D'Oliveiro    schedule 25.04.2012
comment
@Lawrence D'Oliveiro Ах, упс, это было слева и справа, прежде чем я изменил его, чтобы скользить сверху и снизу - я забыл переименовать его.   -  person Bo A    schedule 25.04.2012


Ответы (1)


Похоже проблема в андроиде. Проблема намного менее заметна на Android 4.1.

person Bo A    schedule 17.08.2012