Android如何在动画师后使用动画

时间:2016-06-04 12:25:18

标签: java android

任何人都可以帮我处理我的代码吗?我想要做的是当imageView被触摸时它将运行动画师并将视图移动到屏幕的中心。在动画师完成后,imageView将设置另一个onTouch以运行动画以从0.0 - 1.0缩放。但是动画不会从视图的新位置开始,而是从视图的前一个位置开始。

private void animation() {
    imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            imageView.animate().translationY(height/2).setDuration(1000).setListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    imageView.setOnTouchListener(new View.OnTouchListener() {
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                            ScaleAnimation scale = new ScaleAnimation(0,1,0,1);
                            scale.setDuration(1000);
                            imageView.startAnimation(scale);
                            return true;
                        }
                    });
                }
            }).start();
            return false;
        }
    });
}

链接是我从代码中获得的 http://sendvid.com/0vbtkhi7

以下链接是我想通过动画获得的结果

http://sendvid.com/68q53bh6

2 个答案:

答案 0 :(得分:0)

这是因为您正在使用ViewAnimation。它只是动画视图而不是对象本身,因此对象坐标保持不变,当您重新加载新动画时,它以未更改的X和Y开始。 您应该使用Android Property Animation API.

它更简单,您的问题将得到解决。

答案 1 :(得分:0)

啊我发现解决方案基本上我只需更新枢轴。

private void animation() {
    imageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            imageView.animate().translationY(height/2).setDuration(1000).start();
            imageView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1, 0, 1,imageView.getWidth()/2,imageView.getY() + imageView.getHeight()/2);
                    scaleAnimation.setDuration(1000);
                    imageView.startAnimation(scaleAnimation);
                    return true;
                }
            });
            return false;
        }
    });
}

顺便说一句,谢谢你回答我的问题