动画结束屏幕边界后视图消失

时间:2013-08-27 13:34:57

标签: android animation view screen bounds

我正在为我的项目中的一个菜单实施Animation

动画本身还可以,菜单按照我想要的方式进入和退出:从左到右,从右到左滑动,但是...

如果整个视图都在屏幕外,那么它永远不会回来!如果屏幕内仍有至少一个像素,则它会正常返回。

我相信Android正在处理布局,而不是在屏幕界限之后关心它。我试图放置一个setVisibility(VISIBLE),但它也没有用。

以下是代码:

public class ChwaziMenuAnimation extends Animation{

        float posStart = 0;
        float posTarget = 100;

        int getCurrentPosition(){
            RelativeLayout.LayoutParams rootParam =
                    (RelativeLayout.LayoutParams) rootView.getLayoutParams();

            return rootParam.leftMargin;
        }

        public void setTarget(float target){
            // Save current position
            posStart = getCurrentPosition();
            posTarget = target;
        }

        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {

            RelativeLayout.LayoutParams rootParam =
                    (RelativeLayout.LayoutParams) rootView.getLayoutParams();

            // Calculate current position
            rootParam.leftMargin = (int) ((posTarget - posStart) * interpolatedTime + posStart);

            rootView.setLayoutParams(rootParam);
        }

        /*
         *  Since we will be animating the margin, the bounds will always change 
         */
        public boolean willChangeBounds() {
            return true;
        };


    };

我如何初始化动画:

public void appear(){

        Log.i(TAG, "appear");

        menuAnimation.setTarget(0);
        menuAnimation.setDuration(750);
        rootView.clearAnimation();
        rootView.startAnimation(menuAnimation);
    }

    public void disapear(){
        Log.i(TAG, "disapear");

        menuAnimation.setTarget(-400);
        menuAnimation.setDuration(750);
        rootView.startAnimation(menuAnimation);
    }

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,到目前为止我的解决方法是将视图边界扩展到可显示区域上的至少一个像素,并使该部分透明。丑陋,但对我来说似乎有用。

让它变得更加奇怪:只有当从屏幕左侧移出时,视图才会从屏幕右侧移出时消失。但这可能取决于设备。