同时根据Target缩放和转换ImageView

时间:2014-06-27 14:32:57

标签: android android-animation

我想要做的是同时缩放并在用户触摸时翻译ImageView。 ImageView的最终位置和大小应该等于目标。

下面是OnClickListener的一个片段,它附加到应该执行此操作的每个ImageView。新的位置和大小是从ivYou获得的,也是一个ImageView。

@Override
    public void onClick(View v) {
        // Create animations
        int[] from = new int[2];
        int[] to = new int[2];
        //v.getLocationInWindow(from);
        v.getLocationOnScreen(from);
        //ivYou.getLocationInWindow(to);
        ivYou.getLocationOnScreen(to);
        TranslateAnimation transAnim = new TranslateAnimation(0, to[0] - from[0], 0, to[1] - from[0]);

        float factorX = ivYou.getWidth() / v.getWidth();
        float factorY = ivYou.getHeight() / v.getHeight();
        ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, factorX, 1.0f, factorY);

        // Create animation set
        AnimationSet set = new AnimationSet(true);
        set.setFillAfter(true);
        set.setDuration(ANIM_DURATION);
        set.addAnimation(transAnim);
        set.addAnimation(scaleAnim);

        // Start animations and disable click listener
        v.startAnimation(set);
        v.setOnClickListener(null);
    }

ANIM_DURATION是2000毫秒。

当我运行此代码时,会发生最奇怪的事情。 ImageView转了半圈,然后变小了。当我没有将ScaleAnimator添加到动画集​​中时,ImageView将移动到新位置。但是,对于每个ImageView,这个新位置都不相同。请注意,带有此OnClickListener的ImageView都具有不同的初始位置。

非常感谢任何帮助和反馈!

2 个答案:

答案 0 :(得分:0)

你试过这个构造函数吗? ScaleAnimation(float fromX,float toX,float fromY,float toY,float pivotX,float pivotY),pivotX为widthofimageview / 2,pivotY为heightofimageview / 2,以它为中心。这就是我在翻译比例动画中使用的内容。

答案 1 :(得分:0)

我能够通过将目标视图包装在布局组中并单独设置动画来实现此动画。

换句话说,我翻译包装器布局,并缩放子视图。同时翻译和缩放相同的视图似乎总是会导致意外的动画轨迹,因为缩放混淆了翻译动画正在使用的坐标系。

translateTarget.animate().x(deltaX).y(deltaY).setDuration(1000);
scaleTarget.animate().scaleX(0.01f).scaleY(0.01f).setDuration(1000)