android xml动画怎么使用

2018-09-08 11:14:47 qq_22194581 阅读数 683
  • Android的Activity组件的使用

    本课程适合有一定Java和Android基础的人进行学习;适合需要参加笔试和面试的求职者;适合想要对Android技术知识有深入体会或总结的技术人员。

    625人学习 刘廷龙
    免费试看

View动画分为补间动画和渐变动画,补间动画对应的xml文件放于res/anim中,帧动画放到res/drawable中先说补间动画,其根节点共有以下五种,alpha、scale、translate、rotate、set,里面的值可以直接使用float,也可以使用%,或者%p

补间动画

公共属性

  1. android:detachWallpaper 特殊选项窗口动画,如果这个窗口显示在壁纸上不要使用该动画
  2. android:duration 动画执行时间,单位ms
  3. android:fillAfter 如果设置为true,动画结束后,UI保留在最后一帧
  4. android:interpolator 给动画设置插补器,android提供了多种插补器 @android:anim/linear_interpolator、@android:anim/accelerate_decelerate_interpolator等,也可以在res/anim中自定义插补器,android提供的插补器在本文结尾说明
  5. android:repeatCount 重复次数 1表示执行两次,0表示执行一次,-1无限循环
  6. android:android:repeatMode repeat | restart(default)
  7. android:startOffset 调用view.startAnimation后多少ms开始执行

alpha 渐入渐出动画对应于 AlphaAnimation.java

  1. android:fromAlpha 从哪个alpha值开始 0.0表示全透明,1.0表示全不透明
  2. android:toAlpha 目标alpha值

scale 缩放动画对应于 ScaleAnimation.java

  1. android:fromXScale 起始X缩放比
  2. android:toXScale 结束X缩放比
  3. android:fromYScale 起始Y缩放比
  4. android:toYScale 结束Y缩放比
  5. android:pivotX X轴缩放中心点,如果为0,则向右缩放
  6. android:pivotY Y轴缩放中心点,如果为0,则向下缩放

translate 缩放动画对应于 TranslateAnimation.java

  1. android:fromXDelta 起始位置的X轴的偏移量
  2. android:toXDelta 结束位置的X轴的偏移量
  3. android:fromYDelta 起始位置的Y轴的偏移量
  4. android:toYDelta 结束位置的Y轴的偏移量

rotate 旋转动画对应于 RotateAnimation.java

  1. android:fromDegrees 起始的旋转角度
  2. android:toDegrees 结束的旋转角度
  3. android:pivotX 旋转的X轴中心点
  4. android:pivotY 旋转的Y轴中心点

set 组合动画对应于 AnimationSet.java,给set设置属性会覆盖内部的属性

  1. android:shareInterpolator true如果你想把插补器共享给所有子元素

帧动画 AnimationDrawable.java

<!--res/drawable/animation_frame oneshot默认为false,true表示只执行一次,false表示不断的执行-->
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:duration="200" android:drawable="@drawable/icon1" />
    <item android:duration="200" android:drawable="@drawable/icon2" />
    <item android:duration="200" android:drawable="@drawable/icon3" />
    <item android:duration="200" android:drawable="@drawable/icon4" />
    <item android:duration="200" android:drawable="@drawable/icon5" />
    <item android:duration="200" android:drawable="@drawable/icon6" />
</animation-list>

ImageView iv = findViewById(R.id.iv);
iv.setBackgroundResource(R.drawable.animation_frame);
Drawable background = iv.getBackground();
if (background instanceof AnimationDrawable) {
    ((AnimationDrawable) background).run();
}
Android提供的差值器
  1. AccelerateDecelerateInterpolator(default) 先慢中间快后慢
  2. AccelerateInterpolator 加速运动
    • android:factor 加速因子,默认1,该值越大最大速度越大,持续时间一致,所以初始速度回很小
  3. AnticipateInterpolator 先往反方向运动一段距离再前进
    • android:tension 张力, 默认2,该值越大往反方向运动距离越大
  4. AnticipateOvershootInterpolator 先往反方向运动再前进并且超过目标点,最后回到目标点
    • android:tension 张力, 默认2,该值越大往反方向运动距离越大
    • android:extraTension 额外的张力, 默认1.5,该值越大超过目标点距离越大
  5. BounceInterpolator 类似球落地时的反弹效果
  6. CycleInterpolator 循环,先往正向运动到终点,然后向反方向运动知道运动到-终点处再回来
    • android:cycles 循环次数,默认值为1
  7. DecelerateInterpolator 减速运动
    • android:factor 减速因子,默认为1,越大速度变化越不明显
  8. LinearInterpolator 匀速运动
  9. OvershootInterpolator 移动超过目标点,然后再回来
    • android:tension 张力, 默认2,该值越大超过目标点距离越大
2014-11-14 16:22:00 yan309271291 阅读数 17084
  • Android的Activity组件的使用

    本课程适合有一定Java和Android基础的人进行学习;适合需要参加笔试和面试的求职者;适合想要对Android技术知识有深入体会或总结的技术人员。

    625人学习 刘廷龙
    免费试看

在Android应用程序,使用动画效果,能带给用户更好的感觉,做动画可以通过XML或Android代码来实现。

Animation动画效果的实现可以通过两种方式进行实现,一种是tweened animation (渐变动画),另一种是frame by frame animation (画面转换动画)。

tweened animation渐变动画有以下两种类型:

1.alpha     渐变透明度动画效果

2.scale    渐变尺寸伸缩动画效果

frame by frame animation 画面转换动画有以下两种类型:

1.translate   画面转换位置移动动画效果

2.rotate    画面转移旋转动画效果

在这里,我使用XML来做动画。实现基本的动画,如淡入,旋转等。

步骤:1、首先在res目录中新建anim的文件夹,在anim中新建需要的动画xml资源文件。

anim/alpha.xml(渐变动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        android:fromAlpha="0.1"
        android:toAlpha="1.0"
        android:duration="3000"/> 
<!-- 透明度控制动画效果 alpha
        浮点型值:
            fromAlpha 属性为动画起始时透明度  0.0表示完全透明
            toAlpha   属性为动画结束时透明度  1.0表示完全不透明
            以上值取0.0-1.0之间的float数据类型的数字
        
        长整型值:
            duration  属性为动画持续时间 以毫秒为单位
-->
</set>

anim/scale.xml(伸缩动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <scale  
          android:interpolator="@android:anim/accelerate_decelerate_interpolator"
          android:fromXScale="0.0"
          android:toXScale="1.4"
          android:fromYScale="0.0"
          android:toYScale="1.4"
          android:pivotX="50%"
          android:pivotY="50%"
          android:fillAfter="false"
          android:duration="700" />
</set>
<!-- 尺寸伸缩动画效果 scale
       属性:interpolator 指定一个动画的插入器
        在试验过程中,使用android.res.anim中的资源时候发现
        有三种动画插入器:
            accelerate_decelerate_interpolator  加速-减速 动画插入器
            accelerate_interpolator        加速-动画插入器
            decelerate_interpolator        减速- 动画插入器
        其他的属于特定的动画效果
      浮点型值:
            fromXScale 属性为动画起始时 X坐标上的伸缩尺寸
            toXScale   属性为动画结束时 X坐标上的伸缩尺寸
        
            fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
            toYScale   属性为动画结束时Y坐标上的伸缩尺寸

            说明:以上四种属性值    
                    0.0表示收缩到没有 
                    1.0表示正常无伸缩     
                    值小于1.0表示收缩  
                    值大于1.0表示放大

            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置

            说明:   以上两个属性值 从0%-100%中取值
                    50%为物件的X或Y方向坐标上的中点位置
        
        长整型值:
            duration  属性为动画持续时间   以毫秒为单位

        布尔型值:
            fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
-->
anim/translate.xml(移动动画)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
     <translate
        android:fromXDelta="30"
        android:toXDelta="-80"
        android:fromYDelta="30"
        android:toYDelta="300"
        android:duration="2000"/>
<!-- translate 位置转移动画效果
        整型值:
            fromXDelta 属性为动画起始时 X坐标上的位置    
            toXDelta   属性为动画结束时 X坐标上的位置
            fromYDelta 属性为动画起始时 Y坐标上的位置
            toYDelta   属性为动画结束时 Y坐标上的位置
            注意:
                     没有指定fromXType toXType fromYType toYType 时候,
                     默认是以自己为相对参照物             
        长整型值:
            duration  属性为动画持续时间   以毫秒为单位
-->
</set>

anim/rotate.xml(旋转动画)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate 
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0" 
        android:toDegrees="+350"         
        android:pivotX="50%" 
        android:pivotY="50%"     
        android:duration="3000" />  
<!-- rotate 旋转动画效果
       属性:interpolator 指定一个动画的插入器
             在试验过程中,使用android.res.anim中的资源时候发现
             有三种动画插入器:
                accelerate_decelerate_interpolator   加速-减速 动画插入器
                accelerate_interpolator               加速-动画插入器
                decelerate_interpolator               减速- 动画插入器
             其他的属于特定的动画效果
                           
       浮点数型值:
            fromDegrees 属性为动画起始时物件的角度    
            toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   
        
            说明:    当角度为负数——表示逆时针旋转
                     当角度为正数——表示顺时针旋转              
                     (负数from——to正数:顺时针旋转)   
                     (负数from——to负数:逆时针旋转) 
                     (正数from——to正数:顺时针旋转) 
                     (正数from——to负数:逆时针旋转)       

            pivotX     属性为动画相对于物件的X坐标的开始位置
            pivotY     属性为动画相对于物件的Y坐标的开始位置
                
            说明:  以上两个属性值 从0%-100%中取值
                   50%为物件的X或Y方向坐标上的中点位置

        长整型值:
            duration  属性为动画持续时间   以毫秒为单位
-->
</set>

2、xml资源文件创建完成之后,接下来就是调用这些资源文件。以alpha为例,先创建AlphaActivity。

在activity_alpha.xml中随便放一张背景图片

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/test_bg"
    tools:context=".AlphaActivity" >

</RelativeLayout>
AlphaActivity.java
package com.example.animation_demo;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Toast;
 
public class AlphaActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View view=View.inflate(this, R.layout.activity_alpha, null);
        setContentView(view);
        //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
        Animation animation=AnimationUtils.loadAnimation(this, R.anim.alpha);
        view.startAnimation(animation);
        animation.setAnimationListener(new AnimationListener() {
            @Override
            public void onAnimationStart(Animation arg0) {}   //在动画开始时使用
             
            @Override
            public void onAnimationRepeat(Animation arg0) {}  //在动画重复时使用

            @Override
            public void onAnimationEnd(Animation arg0) {
                Toast.makeText(AlphaActivity.this, "在动画结束时使用", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

这个是整个layout文件的动画,也可以让任何UI元素调用starAnimation方法。

例如:textMsg.startAnimation(animation); 这时候就不需要下面代码 动画填充指定xml了

View view=View.inflate(this, R.layout.activity_alpha, null);
setContentView(view);
直接setContentView(R.layout.activity_alpha); 就OK了。卒。

效果图:

附上找到的一些基本的xml效果:

Fade In:淡入

alpha是渐变透明度效果,值由0到1

fade_in.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
   
    <alpha  
        android:duration="1000"  
        android:fromAlpha="0.0"  
        android:interpolator="@android:anim/accelerate_interpolator"  
        android:toAlpha="1.0" />  
</set> 
Fade Out :淡出
以Fade In刚好相反,值由1到0
fade_out.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
   
    <alpha  
        android:duration="1000"  
        android:fromAlpha="1.0"  
        android:interpolator="@android:anim/accelerate_interpolator"  
        android:toAlpha="0.0" />  
</set>  
Cross Fading:  交叉的淡入和淡出
同时使用Fade in和Fade out可以达到交叉的效果
public class CrossfadeActivity extends Activity implements AnimationListener {  
  
    TextView txtMessage1, txtMessage2;  
    Button btnStart;  

    Animation animFadeIn, animFadeOut;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        // TODO Auto-generated method stub  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_crossfade);  

        txtMessage1 = (TextView) findViewById(R.id.txtMessage1);  
        txtMessage2 = (TextView) findViewById(R.id.txtMessage2);  
        btnStart = (Button) findViewById(R.id.btnStart);  

        // load animations  
        animFadeIn = AnimationUtils.loadAnimation(getApplicationContext(),  
                R.anim.fade_in);  
        animFadeOut = AnimationUtils.loadAnimation(getApplicationContext(),  
                R.anim.fade_out);  

        // set animation listeners  
        animFadeIn.setAnimationListener(this);  
        animFadeOut.setAnimationListener(this);  
  
        // button click event  
        btnStart.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                txtMessage2.setVisibility(View.VISIBLE);  
                txtMessage2.startAnimation(animFadeIn);  
                txtMessage1.startAnimation(animFadeOut);  
            }
        });
    }
  
    @Override  
    public void onAnimationEnd(Animation animation) {  
          
        if (animation == animFadeOut) {  
            txtMessage1.setVisibility(View.GONE);  
        }  
          
        if(animation == animFadeIn){  
            txtMessage2.setVisibility(View.VISIBLE);  
        }  
    }  
  
    @Override  
    public void onAnimationRepeat(Animation animation) {  
        // TODO Auto-generated method stub  
    }  
  
    @Override  
    public void onAnimationStart(Animation animation) {  
        // TODO Auto-generated method stub  
    }  
}

BLink:若隐若现

blink.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
    <alpha android:fromAlpha="0.0"  
        android:toAlpha="1.0"  
        android:interpolator="@android:anim/accelerate_interpolator"  
        android:duration="600"  
        android:repeatMode="reverse"  
        android:repeatCount="infinite"/>  
</set>  
Zoom In:放大
zoom_in.xml  
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
    <scale  
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:duration="1000"  
        android:fromXScale="1"  
        android:fromYScale="1"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:toXScale="3"  
        android:toYScale="3" >  
    </scale>  
</set>  
Zoom Out:缩小
<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android"  
    android:fillAfter="true" >  
    <scale  
        xmlns:android="http://schemas.android.com/apk/res/android"  
        android:duration="1000"  
        android:fromXScale="1.0"  
        android:fromYScale="1.0"  
        android:pivotX="50%"  
        android:pivotY="50%"  
        android:toXScale="0.5"  
        android:toYScale="0.5" >  
    </scale>  
</set>  
Rotate:旋转
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="600"  
        android:repeatMode="restart"  
        android:repeatCount="infinite"  
        android:interpolator="@android:anim/cycle_interpolator"/>  
</set>
好长啊。。。既然你们都看到这里了,再多说几句。。

根节点<set>的属性:

名称

属性

备注

android:shareInterpolator

是否共享插入器

共享时,四个子节点都用一个插入器

android:interpolator

指定一个动画的插入器

使用系统资源

android:fillEnabled

 

当设置为true时,fillAfter和fill, Befroe将会都为true,此时会忽略fillBefore 和fillAfter两种属性

android:fillAfter

该动画转化是否在动画结束后被应用

boolean

android:fillBefore

该动画转化是否在动画开始前被应用

boolean

android:repeatMode

重复模式

"restart"  或者 "reverse"

android:repeatCount

重复次数

integer

android:duration

动画持续时间

integer

android:startOffset

动画时间间隔

long

android:zAdjustment

定义动画z order的变换

[normal] or [top] or [bottom]

android:detachWallpaper

 

boolean


欢迎交流 http://blog.csdn.net/ycwol/article/details/41118831

2018-09-05 16:02:51 qq_22194581 阅读数 1076
  • Android的Activity组件的使用

    本课程适合有一定Java和Android基础的人进行学习;适合需要参加笔试和面试的求职者;适合想要对Android技术知识有深入体会或总结的技术人员。

    625人学习 刘廷龙
    免费试看

属性动画对应的xml文件放于res/animator中,其根节点共有下列三种,objectanimator、animator、set

objectanimator 对应 ObjectAnimator.java

  1. android:propertyName 必须的,需要操作的属性
  2. android:valueTo 必须的,目标值
  3. android:valueFrom 起始值,如果不设置,会调用target的get方法,如果get方法不存在则会报错(可以使用装饰器模式)
  4. android:duration 持续时间单位ms,默认值300ms
  5. android:startOffset 调用start后延迟多少ms执行动画
  6. android:repeatCount 重复次数,0表示不重复,1表示重复一次,-1表示无限循环
  7. android:repeatMode reverse | restart 前者表示偶数次动画将动画起点当做终点,将终点当成起点,默认restart
  8. android:valueType intType | floatType(default),当value为颜色时,不要设置该值
<!--res/animator/animator_object.xml-->
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="translationX" android:valueTo="700f" android:duration="2000" android:startOffset="1000" android:repeatCount="-1" android:repeatMode="reverse" />

Animator animator_object = AnimatorInflater.loadAnimator(this, R.animator.animator_object);
animator_object.setTarget(btn);
animator_object.start();

animator 对应 ValueAnimator.java

  1. android:valueTo 必须的,目标值
  2. android:valueFrom 必须的,起始值
  3. android:duration 持续时间单位ms,默认值300ms
  4. android:startOffset 调用start后延迟多少ms执行动画
  5. android:repeatCount 重复次数,0表示不重复,1表示重复一次,-1表示无限循环
  6. android:repeatMode reverse | restart 前者表示偶数次动画将动画起点当做终点,将终点当成起点,默认restart
  7. android:valueType intType | floatType(default),当value为颜色时,不要设置该值
<!--res/animator/animator_animator.xml-->
<?xml version="1.0" encoding="utf-8"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android" android:valueFrom="0" android:valueTo="100" android:duration="1000" android:repeatMode="reverse" android:repeatCount="0" android:startOffset="1000"/>

ValueAnimator animator_object = (ValueAnimator) AnimatorInflater.loadAnimator(this, R.animator.animator_animator);
animator_object.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
      @Override
      public void onAnimationUpdate(ValueAnimator animation) {
          Log.d(TAG, "onAnimationUpdate: " + animation.getAnimatedValue());
      }
});
animator_object.start();

set 对应 AnimatorSet.java

  1. android:ordering 执行顺序 sequentially | together (default),前者表示顺序执行,上个动画执行完了,下个动画才开始执行,如果上个动画repeatCount为-1则下个动画永远不可能执行,后者表示同时执行
<!--res/animator/animator_set.xml-->
<?xml version="1.0" encoding="utf-8"?>
<set android:ordering="together" xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="translationX" android:valueTo="700f" android:duration="2000" android:startOffset="1000" android:repeatCount="-1" android:repeatMode="reverse" />
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="backgroundColor" android:valueTo="#000" android:duration="2000" android:startOffset="1000" android:repeatCount="-1" android:repeatMode="reverse" />
</set>

Animator animator_object = AnimatorInflater.loadAnimator(this, R.animator.animator_set);
animator_object.setTarget(btn);
animator_object.start();
2017-05-17 11:29:55 xuaho0907 阅读数 75285
  • Android的Activity组件的使用

    本课程适合有一定Java和Android基础的人进行学习;适合需要参加笔试和面试的求职者;适合想要对Android技术知识有深入体会或总结的技术人员。

    625人学习 刘廷龙
    免费试看

首先把连续的图片放在drawable文件夹下,我准备的连续图片为nv1~nv4


并新建一个控制图片播放顺序及时间的XML文件,这里我命名为animation.xml:

然后编写animation.xml的控制代码:


每个<item>相当于就是一个图片     android:drawable="里面放图片资源"   android:duration="每张图片播放的时间(毫秒为单位)"

然后再设置一下Layout文件夹下面的布局文件:

这里为我放了一个<ImageView> 设置了backgroud的值为刚刚我新建的控制图片播放顺序及时间的XML文件(animation)

最后再在Activity里面启动它就好了,调用获取到的id对应的ImageView的getBacground()方法得到一个AnimationDrawable的对象,然后调用这个对象的start()方法就行了:


收工!


2017-08-14 16:27:28 zhangphil 阅读数 8910
  • Android的Activity组件的使用

    本课程适合有一定Java和Android基础的人进行学习;适合需要参加笔试和面试的求职者;适合想要对Android技术知识有深入体会或总结的技术人员。

    625人学习 刘廷龙
    免费试看

Android旋转动画rotate动画,xml配置set实现


作为快速备忘查询,写到这里记下。

在xml配置动画所需的set设置资源,然后上层Java代码以最少的代码实现一个匀速旋转的动画,这种开发场景在一些加载动画中比较常见,比如视频缓冲时候的加载动画。

先在res下面创建anim目录,然后再res/anim下面创建一个自命名的动画属性配置文件假如叫做rotate_anim.xml文件:

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



然后再上层Java代码,该代码的意图使一个view(本例是ImageView)匀速旋转:

package zhangphil.demo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView image= (ImageView) findViewById(R.id.image);
        Animation rotateAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
        image.startAnimation(rotateAnimation);
    }
}