android - 如何实现图片的循环转动?
巴扎黑
巴扎黑 2017-04-17 11:26:10
[Android讨论组]

在Android中我用RotateAnimation自定义了一个image,想让它循环转动,下面是我在res/anim/中的rotate_indefinitely.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:duration="1200" />

我用AndroidUtils.loadAnimation()把上述内容应用到ImageView时,一切运作正常:

spinner.startAnimation( 
    AnimationUtils.loadAnimation(activity, R.anim.rotate_indefinitely) );

但是,每当image转过360°到达最高点时,就会暂停片刻,然后才继续转动,无法连续的进行循环转动,我猜想,有可能是因为我错误的使用了android:iterpolator="@android:anim/accelerate_interpolator"(AccelerateInterpolator)这个内置程序,但我不太清楚该如何解决这种错误,保证image可以连续无停顿的旋转?

原问题:How to make a smooth image rotation in Android?

巴扎黑
巴扎黑

全部回复(1)
PHP中文网

答:Bakhtiyor
(最佳答案)
你应该使用LinearInterpolato,通过android:interpolator="@android:anim/linear_interpolator".
找到animation XML文件,然后使用内置的android.R.anim.linear_interpolator。
或者你可以创建自己的XML interpolation文件,例如将它命名为res/anim/linear_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<linearInterpolator xmlns:android="http://schemas.android.com/apk/res/android" />

然后添加动画XML:

android:interpolator="@anim/linear_interpolator"

答:ferdy182
设定toDegrees="359",因为360º和0º指的是一个度数


答:Norm Tatlock
无论我怎么做,都不能保证用如下方法可以让image连续循环转动,我只能尽量缩小停顿的时间。如果你不需要做太多次的转动,可以试试如下代码:

float lastDegree = 0.0f;
        float increment = 4.0f;
        long moveDuration = 10;
        for(int a = 0; a < 150; a++)
        {
            rAnim = new RotateAnimation(lastDegree, (increment * (float)a),  Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            rAnim.setDuration(moveDuration);
            rAnim.setStartOffset(moveDuration * a);
            lastDegree = (increment * (float)a);
            ((AnimationSet) animation).addAnimation(rAnim);
        }

答:Luis E. Fernandez
建议使用如下方法:

<?xml version="1.0" encoding="UTF-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1600"
    android:fromDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:toDegrees="358" />

如果想要往相反方向转的话:

<?xml version="1.0" encoding="UTF-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1600"
    android:fromDegrees="358"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:toDegrees="0" />
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号