Android 补间动画之旋转动画RotateAnimation

Android动画系列

博客导航:

          Android 补间动画之旋转动画RotateAnimation_第1张图片

1.介绍:

在接下来的不断地学习Android动画期间,会总结相关知识点。旋转动画是Android补间动画中的其中一种,本篇博客主要总结了旋转动画的属性、实现方式、相关方法和一个小案例的实现。

2.属性

 

duration 动画执行的时间
pivotX 旋转中心点的X轴坐标,50%。浮点数或是百分比,浮点数和百分比都是表示距离Object的左边缘,如5、5%。还有一种百分比是相对于父容器的左边缘,如5%p。一般50%表示正中心。
pivotY 旋转中心点的Y轴坐标,50%。同上。
repeatCount 重复次数,无数循环,可以设置为infinite或是-1,表示无限的。
repeatMode 重复运行的模式,默认为restart,每次重复从头开始。可以设置为reverse,表示结束开始之后向前重复运行。
fromDegrees 开始角度位置0。
toDegrees 结束角度位置,正数表示顺时针,负数表示逆时针。
detachWallpaper 表示是否在壁纸上运行
zAdjustment 表示被animated的内容在运行时在z轴上的位置,默认为normal。normal保持内容当前的z轴顺序、top运行时在最顶层显示、bottom运行时在最底层显示

 

 

 

 

 

 

 

 

 

 

 

 

3.实现方式

3.1 xml方式



    

3.2 代码方式实现

Animation rotate = new RotateAnimation(0f, 359f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        LinearInterpolator lin = new LinearInterpolator();
        rotate.setInterpolator(lin); //设置插值器
        rotate.setDuration(1000);//设置动画持续周期
        rotate.setRepeatCount(-1);//设置重复次数
        rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态

4.动画的监听事件

animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                //动画开始回调方法
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                //动画结束
                rotate_img.clearAnimation();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                //动画重复执行
            }
        });

5.方法解释

setInterpolator 设置动画的旋转速率:LinearInterpolator为匀速、Accelerateinterpolator为加速效果、DecelerateInterpolator为减速效果、默认为开始结束慢中间快。
setStartOffset 表示执行start函数后等待开始运行的时间,单位为ms。

6.案例实现

6.1 Activity的布局文件




    

6.2 Activity代码实现

package com.menglong.animatordemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements View.OnClickListener {

    private ImageView rotate_img;
    private Animation animation;
    private Button rotate_but;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        rotate_img = (ImageView) findViewById(R.id.rotate_img);
        rotate_but = (Button) findViewById(R.id.rotate_but);
        rotate_but.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //xml文件实现方式
        xml();
        //代码实现方式
//        code();
    }

    private void code() {
        Animation rotate = new RotateAnimation(0f, 359f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        LinearInterpolator lin = new LinearInterpolator();
        rotate.setInterpolator(lin); //设置插值器
        rotate.setDuration(1000);//设置动画持续周期
        rotate.setRepeatCount(-1);//设置重复次数
        rotate.setFillAfter(true);//动画执行完后是否停留在执行完的状态
//        rotate.setStartOffset(1000);//执行前的等待时间  单位ms
        rotate_img.setAnimation(rotate);
        rotate_img.startAnimation(rotate);
    }

    private void xml() {
        //xml文件动画执行
        animation = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
        //setInterpolator设置动画的旋转速率:LinearInterpolator为匀速
        //另:Accelerateinterpolator为加速效果、DecelerateInterpolator为减速效果、默认为开始结束慢中间快。
        LinearInterpolator lin = new LinearInterpolator();
        animation.setInterpolator(lin);
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                //动画开始回调方法
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                //动画结束
                rotate_img.clearAnimation();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                //动画重复执行
            }
        });
        rotate_img.startAnimation(animation);
    }
}

6.3 rotate_anim.xml



    

 

7.案例效果展示

                                                       Android 补间动画之旋转动画RotateAnimation_第2张图片

8.项目地址

https://github.com/SunMengLong/AnimatorDemo

 

 

 

 

 

 

 

 

你可能感兴趣的:(Android知识库)