在Android中连续旋转图像视图

时间:2012-03-09 08:11:40

标签: android

我正在使用以下代码来旋转图片视图

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false">
<rotate 
    android:fromDegrees="0"
    android:toDegrees="360"
    android:duration="500"
    android:repeatCount="infinite"
    android:pivotX="50%"
    android:pivotY="50%"
    >
</rotate>
</set> 

动画rotate1 = AnimationUtils.loadAnimation(this,R.anim.rotate_picture); rotate.startAnimation(rotate1);

我使用的布局是:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" 
>
<ImageView 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/loader"
android:layout_centerInParent="true"
android:id="@+id/rotate"
/>
</RelativeLayout>

但它停止500ms并再次重新启动。但我需要不断旋转图像。不停在中间。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

    //custom_anim.xml
<?xml version="1.0" encoding="utf-8" ?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000" />
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="2000">
    </alpha>
    <scale
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromXScale=".1"
        android:fromYScale=".1"
        android:toXScale="1.0"
        android:toYScale="1.0"
        android:duration="2000" />

</set>


//Oncreate 

 Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.custom_anim);

            imgageview.startAnimation(rotateimage);
            rotateimage.setAnimationListener(new AnimationListener() {

                public void onAnimationStart(Animation animation) {
                    // TODO Auto-generated method stub

                }

                public void onAnimationRepeat(Animation animation) {
                    // TODO Auto-generated method stub

                }

                public void onAnimationEnd(Animation animation) {
                    // TODO Auto-generated method stub

                    AnimateandSlideShow();
                }
            });


//function
private void AnimateandSlideShow() {
Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.custom_anim);

            imgageview.startAnimation(rotateimage);
            rotateimage.setAnimationListener(new AnimationListener() {

                public void onAnimationStart(Animation animation) {
                    // TODO Auto-generated method stub

                }

                public void onAnimationRepeat(Animation animation) {
                    // TODO Auto-generated method stub

                }

                public void onAnimationEnd(Animation animation) {
                    // TODO Auto-generated method stub

                    AnimateandSlideShow();
                }
            });
}

答案 1 :(得分:0)

我刚尝试过。由于某些奇怪的原因,它使用AccelerateDecelerateInterpolator作为默认值。添加android:interpolator="@android:anim/linear_interpolator",您将获得更有用的功能。

然而,每隔500毫秒仍有一个微小的停顿,我认为它会重新加载动画,或者它有一帧太多(0 = 360)

您可以将值增加更长的持续时间以获得更好的效果。试试android:duration="50000"android:toDegrees="36000"

答案 2 :(得分:0)

在旋转属性

中添加此属性
android:repeatMode="restart"

或者更改您的rotate1.xml文件,删除set tag。像这样:

<rotate 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromDegrees="0"
   android:toDegrees="360"
   android:duration="500"
   android:repeatCount="infinite"
   android:pivotX="50%"
   android:pivotY="50%">
</rotate>