7

我正在为游戏中的练习实施比例动画。我正在遵循所有指南,但总是发生一些奇怪的事情,而不是让对象变大。动画不仅使图像变大,而且即使我没有使用翻译动画也会移动它......

这里是xml文件

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"    
 xmlns:android="http://schemas.android.com/apk/res/android">
<scale
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="1.0"
    android:toXScale="1.4"
    android:fromYScale="1.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fillAfter="false"
    android:duration="1000" />
 </set>

在这里它在java中被调用

private void startAnimation(final ImageView imageView) {
        final Animation popAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.scalebounce);
        imageView.startAnimation(popAnim);
        popAnim.setAnimationListener(new AnimationListener() {

            public void onAnimationStart(Animation animation) {

            }

            public void onAnimationRepeat(Animation animation) {

            }

            public void onAnimationEnd(Animation animation) {
                imageView.clearAnimation();
                imageView.setVisibility(View.GONE);
            }
        });
    }

真的很奇怪,我已经尝试了我在网上找到的所有解决方案,但没有运气,即使它只是规模,它仍然可以转换行为......我从小点制作图像然后它变得更大(正常尺寸)。但我不想让它移动,只是为了在它的位置上。谢谢 :)

PS我一直在观察动画,它似乎需要更大的空间,这就是为什么它看起来像在移动..为什么它需要更大的空间?不是实际的图像大小?

4

2 回答 2

5

pivotX 和 pivotY 需要等于您的视图应该缩放的位置。

为了演示,这里有一个图表来说明:

在此处输入图像描述

您的枢轴点当前位于视图之外,使您的视图看起来像在移动和缩放一样。

如果您希望枢轴点位于视图的左上角,请将 pivotX / pivotY 设置为 0。

如果您希望比例从中心设置,请设置pivotX = view.getWidth() / 2f& (如第一张图片所示)pivotY = view.getHeight() / 2f

希望这可以帮助 :)

于 2013-10-09T02:09:06.183 回答
3

我有同样的问题。我不知道它是否和我的几乎一样,但它可能会有所帮助。我在滚动视图中有按钮,在 relativelayout 中有 relativelayout。当我想为按钮的比例设置动画时,遇到了和你一样的问题,所以我用 java 代码而不是 xml 制作它,但 RELATIVE_TO_PARENT 和 RELATIVE_TO_SELF 之间没有区别. 我发现枢轴每次都取自按钮的父级(滚动视图)。不知道为什么。所以我决定计算滚动视图的枢轴,它在我的按钮所在的位置:

ScaleAnimation animation = new ScaleAnimation(1.0f, 1.1f, 1.1f, 1.0f, Animation.RELATIVE_TO_PARENT, (float) (button1.getX()+ 45*ssu) / width, Animation.RELATIVE_TO_PARENT, (float) (button1.getY()+ 45*ssu) / (4 * height) );
                animation.setDuration(1000);
                animation.setRepeatMode(ValueAnimator.REVERSE);
                animation.setRepeatCount(animation.INFINITE);
                button1.startAnimation(animation);

您可以看到,我将pivotX的部分(我的按钮的x位置)划分为孔的宽度,将pivotY的部分(我的按钮的y位置)划分为滚动视图的孔高度(4 *高度)并添加45*ssu 到按钮位置,因为它是它的一半,当你不这样做时,枢轴位于左上角。PS:ssu 是一个自制的缩放器,因为我在 java 代码 90*ssu 中设置了按钮的宽度和高度

希望二能帮到你:)

于 2015-07-27T17:39:32.287 回答