Android动画 - 查看不刷新

时间:2015-02-23 20:25:57

标签: android animation

这可能是一个非常简单的问题,我有一个动态添加的片段。片段有一个带有单击事件的按钮,可以在x轴上为视图+50设置动画,在y轴上设置+50。

动画效果很好,但问题是我在动画后单击按钮时它没有工作但是点击事件仍然保留在原始位置。如果这没有意义,我会发布一个链接到youtube视频,显示正在发生的事情。我很好奇是否有需要刷新的东西?

https://www.youtube.com/watch?v=TLaS6u5v4m0

这是我的代码:

public class AnimationFragment extends Fragment {
    public AnimationFragment() {
        // Required empty public constructor
    }

    View view;
    float curX, curY, newX, newY;
    boolean animating = false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        curX = 0; curY = 0;
        view  = inflater.inflate(R.layout.fragment_animation, container, false);
        // get the button and add the onclick event
        Button animateButton = (Button)view.findViewById(R.id.animateButton);
        //
        if (null != animateButton) {
            animateButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    animateButtonClick(v);
                }
            });
        }
        return view;

    }


    public void animateButtonClick(View view)  {
        // wait for the animation to be complete
        if (animating) return;
        animating = true;

        // get the new x and new y
        newX = curX + 50.0f;
        newY = curY + 50.0f;
        // get the layout that will be animated
        final RelativeLayout animationFragment = (RelativeLayout)getView().findViewById(R.id.animationFragment);
        Animation slide =  new TranslateAnimation(
                                        Animation.ABSOLUTE,curX,
                                        Animation.ABSOLUTE, newX,
                                        Animation.ABSOLUTE, curY,
                                        Animation.ABSOLUTE, newY);
        // add other animation attributes
        slide.setDuration(400);
        slide.setFillAfter(true);
        slide.setFillEnabled(true);
        // start the animation
        animationFragment.startAnimation(slide);

        slide.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                // nothing
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // make the view enable
                animating = false;
                // sets the new x and new y
                curX = newX;
                curY = newY;
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // nothing
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

尝试不用:

slide.setFillAfter(true);
slide.setFillEnabled(true);

从文档中,setFillEnabled

  

如果fillEnabled为true,则动画将应用值   fillBefore

setFillAfter

  

如果fillAfter为true,则表示此动画执行的转换   它会在完成后继续存在。

首先尝试不使用,如果它有效,并且您希望它之前发生,请删除两个setFillAfter() / setFillEnabled()方法。如果您希望在之后发生,请仅使用setFillAfter(true)