1

ViewAnimator を使用した Android アニメーションに問題があります。

これが私のコードです(はい、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;
}

まず、アニメーションが遅れます。アニメーションが始まるまで 0.5 秒待たなければなりません。2 つ目は、ViewAnimator で実行される最初のアニメーションがまったく実行されないか (最初の問題のために 0.5 秒待機した後、次のビューにスキップするだけです)、実行が速すぎて気付かないことです。

これらの問題に対する回避策/修正はありますか?

4

1 に答える 1

1

Android側の問題だったようです。この問題は、Android 4.1 ではあまり目立ちません。

于 2012-08-17T19:57:05.850 に答える