需要旋转ImageView

时间:2018-10-21 20:38:23

标签: android

我有一个测试图像:宽度:136px和高度:168px。 它在屏幕上的位置是:x:102和y:768。 我正在使用动画旋转此图像:

Animation rotate_animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
    rotate_animation.reset();
    tile_1.startAnimation(rotate_animation);

关联的xml是rotate.xml:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:toYScale="0.0"
android:pivotX="100%"
android:pivotY="100%"
android:duration="2000" />

它旋转,但完全脱离屏幕,并返回到开始的位置。 它似乎围绕x:0和y:0旋转。 我想围绕它的中心旋转它。 我已经试过xml中的数字了,但是它总是绕着一个大圆圈。

感谢您的帮助:)

3 个答案:

答案 0 :(得分:0)

尝试删除toYScale并将枢轴设置为50%。这样,它应该从图像的中心旋转

答案 1 :(得分:0)

请在rotate.xml中使用此代码

 <?xml version="1.0" encoding="utf-8"?>
   <set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000"
        android:interpolator="@android:anim/cycle_interpolator"/>
</set>

答案 2 :(得分:0)

Found a easy way to do a simple rotation.
My image is tile_1:

tile_1.animate().rotation(360);

HOWEVER, it will only work once unless you set up a Listener first, so full code for a quick 360 degree rotation with a reset to be able to do it again:

 tile_1.animate().setListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            tile_1.setRotation(0);

        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });
    tile_1.animate().rotation(360);

//您必须将旋转值重置为0。我发现clearAnimation在这里不起作用。当您第二次旋转时,它什么也不做,因为图像已经旋转了360度,即使它看起来似乎已被重置;因此您必须将旋转度设置回零。然后它完美地工作。希望这对其他人有帮助:)

您也可以在此处添加.setDuration,因此请使用“最后一行”: tile_1.animate()。rotation(360).setDuration(1000);

最后一件事:如果将其与TranslateAnimation结合使用,并且将两者的持续时间设置为相同的时间,则它将在完成1圈旋转时从XY点移动到XY点。非常光滑的外观。感谢大家的投入:)