开发者

when i am doing 3d transition the animation gets stop for sometime

when i am doing 3d transition the view is stopping for some time and then rotating the two view contain first view a listview and map and second view a list view both views are interacting with database

(code block fixed)

/**
 * Setup a new 3D rotation on the container view.
 *
 * @param position the item that was clicked to show a picture, or -1 to show the list
 * @param start the start angle at which the rotation must begin
 * @param end the end angle of the rotation
 */

private void applyRotation(int position, float start, float end) {
    // Find the center of the container
    final float centerX = mContainer.getWidth() / 2.0f;
    final float centerY = mContainer.getHeight() / 2.0f;

    final float centerX2 = mContainerView.getWidth() / 2.0f;
    final float centerY2 = mContainerView.getHeight() / 2.0f;

    // Create a new 3D rotation with the supplied parameter
    // The animation listener is used to trigger the next animation
    final Rotate3dAnimation rotation =
            new Rotate3dAnimation(start, end, centerX, centerY, 310.0f, true);
    rotation.setDuration(500);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(position));

    mContainer.startAnimation(rotation);

    //for view
    final Rotate3dAnimation rotation2 =
            new Rotate3dAnimation(start, end, centerX2, centerY2, 310.0f, true);
    rotation2.setDuration(500);
    rotation2.setFillAfter(true);
    rotation2.setInterpolator(new AccelerateInterpolator());
    //rotation2.setAnimationListener(new DisplayNextView(position));
    mContainerView.startAnimation(rotation2);
}

/**
 * This class listens for the end of the first half of the animation.
 * It then posts a new action that effectively swaps the views when the container
 * is rotated 90 degrees and thus invisible.
 */

private final class DisplayNextView implements Animation.AnimationListener {
    private final int mPosition;

    private DisplayNextView(int position) {
        mPosition = position;
    }

    public void onAnimationStart(Animation animation) {
    }

    public void onAnimationEnd(Animation animation) {
        mContainer.post(new SwapViews(mPosition));
 开发者_运维百科   }

    public void onAnimationRepeat(Animation animation) {
    }
}

/**
 * This class is responsible for swapping the views and start the second
 * half of the animation.
 */

private final class SwapViews implements Runnable {
    private final int mPosition;

    public SwapViews(int position) {
        mPosition = position;
    }

    public void run() {
        final float centerX = mContainer.getWidth() / 2.0f;
        final float centerY = mContainer.getHeight() / 2.0f;
        Rotate3dAnimation rotation;

        final float centerX2 = mContainerView.getWidth() / 2.0f;
        final float centerY2 = mContainerView.getHeight() / 2.0f;
        Rotate3dAnimation rotation2;

        if (mPosition==2) {
            mButtonCounty.setVisibility(Button.GONE);
            mButtonRadar.setVisibility(Button.VISIBLE);
            mButtonRadar.requestFocus();

            mNearShopsView.setVisibility(LinearLayout.GONE);
            mCountyListView.setVisibility(RelativeLayout.VISIBLE);
            mCountyListView.requestFocus();

            rotation = new Rotate3dAnimation(90, 180, centerX, centerY, 310.0f, false);

            rotation2 = new Rotate3dAnimation(90,180, centerX2, centerY2, 310.0f, false);
        } else {
            mButtonRadar.setVisibility(Button.GONE);
            mButtonCounty.setVisibility(Button.VISIBLE);
            mButtonCounty.requestFocus();

            mCountyListView.setVisibility(RelativeLayout.GONE);
            mNearShopsView.setVisibility(LinearLayout.VISIBLE);
            mNearShopsView.requestFocus();

            rotation = new Rotate3dAnimation(90, 0, centerX, centerY, 310.0f, false);
            rotation2 = new Rotate3dAnimation(90,0, centerX2, centerY2, 310.0f, true);
        }

        rotation.setDuration(50);
        rotation.setFillAfter(false);
        rotation.setInterpolator(new DecelerateInterpolator());

        mContainer.startAnimation(rotation);

        rotation2.setDuration(50);
        rotation2.setFillAfter(false);
        rotation2.setInterpolator(new DecelerateInterpolator());

        mContainerView.startAnimation(rotation2);
    }
}


You get this "stop" while doing non 3d transactions? If not then you should enable DrawingCache to your views. This has effect mostly in TextViews since they redraw them selves at every step of the animation. Set View.setDrawingCacheEnabled(true); to your views.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜