Android分别通过代码和xml实现动画效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android分别通过代码和xml实现动画效果相关的知识,希望对你有一定的参考价值。

一.android动画类型

 

Android的animation由四种类型组成:

XML中

alph 渐变透明度动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果

 

 

 

 

 

JavaCode中

AlphaAnimation 渐变透明度动画效果
ScaleAnimation 渐变尺寸伸缩动画效果
TranslateAnimation 画面转换位置移动动画效果
RotateAnimation 画面转移旋转动画效果

 

 

 

 

 二.Android动画模式

Animation主要有两种动画模式:

一种是tweened animation(渐变动画)

XML中 JavaCode
alpha AlphaAnimation
scale ScaleAnimation

 

 

 

一种是frame by frame(画面转换动画) 

XML中 JavaCode
translate TranslateAnimation
rotate RotateAnimation

 

 

 

 

三.Android动画实现

1.通过代码实现动画效果

(1)透明度渐变效果

//1.创建透明度动画对象,数值越小越透明
        AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0.1f);
        //设置动画的持续时间
        alphaAnimation.setDuration(3000);
        //设置是否保留最终状态
//        alphaAnimation.setFillAfter(true);
        //设置重复次数,填-1无限循环
        alphaAnimation.setRepeatCount(2);

        //设置动画的重复模式,默认是Restart,Reverse是反方向执行
        alphaAnimation.setRepeatMode(Animation.REVERSE);
        //通过控件启动动画
        imageView.startAnimation(alphaAnimation);

 

(2)缩放效果

 

//相对控件自己的左上角为原点缩放
//        ScaleAnimation scaleAnimation = new ScaleAnimation(0.2f, 2, 0.2f, 2);
        //相对点(200,300)进行缩放
//        ScaleAnimation scaleAnimation = new ScaleAnimation(0.2f,2,0.2f,2,200,300);
        //相对控件自己的中心点进行缩放
//        ScaleAnimation scaleAnimation = new ScaleAnimation(0.2f,2,0.2f,2,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);



        //相对父容器的中心点进行缩放
        // fromX:开始缩放的X轴倍数。如1.0f:本身大小;如2.0f:从自己两倍开始
// toX:结束缩放的X轴倍数。同上...
// fromY:始缩放的Y轴倍数。
// toY:结束缩放的Y轴倍数。
/** pivotXType:X轴缩放中心点类型;可选值有:
 Animation.RELATIVE_TO_SELF相对自己--常用
 Animation.RELATIVE_TO_PARENT相对父窗体
 Animation.ABSOLUTE 绝对的---不常用
 */

// pivotXValue:在pivotXType的基础上,X轴缩放中心的位置。如:0.5f:缩放中心就在控件的一半的位置。如果是0.0f,则会在控件本身的左边位置
// pivotYType:X轴缩放中心点类型;同上 ...
// pivotYValue:在pivotYType的基础上,Y轴缩放中心的位置。
        ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f, 2, 0.5f, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scaleAnimation.setDuration(3000);
        imageView.startAnimation(scaleAnimation);

 


(3)旋转效果

 

  

//相对自己的左上角旋转,正数代表顺时针,负数逆时针
        RotateAnimation rotateAnimation = new RotateAnimation(0,-180);
        //相对(200,300)点旋转
        //RotateAnimation rotateAnimation = new RotateAnimation(0,-180,200,300);
        rotateAnimation.setDuration(3000);
        imageView.startAnimation(rotateAnimation);

 

(4)平移效果

 

 

/*new TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);

        例如:从控件自己的位置开始,向下移动自己的一倍距离。*/
        //TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
         //       Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1f);
//        TranslateAnimation translateAnimation = new TranslateAnimation(0,200,0,0);
        //获得屏幕宽度:
        int screenWidth = getResources().getDisplayMetrics().widthPixels;
        int imgeWidth = imageView.getWidth();
        //TranslateAnimation translateAnimation = new TranslateAnimation(0,screenWidth-imgeWidth,0,0);
        TranslateAnimation translateAnimation = new TranslateAnimation(0,200,0,0);
        translateAnimation.setDuration(3000);
        translateAnimation.setFillAfter(true);
        imageView.startAnimation(translateAnimation);

(5)动画集合效果

@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,300,0,300);                                                                 //设置位置变化动画  
    final Animation scaleAnimation = new   
     ScaleAnimation(0f,1f,0f,1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);  
                                                            //设置尺寸变化动画  
    final Animation alphaAnimation=new AlphaAnimation(0.1f,1.0f);   //设置透明度变化动画  
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(10000);      //设置位置变化动画的持续时间  
            scaleAnimation.setDuration(10000);          //设置尺寸变化动画的持续时间  
            alphaAnimation.setDuration(10000);          //设置透明度渐变动画的持续时间  
            AnimationSet set=new AnimationSet(true);    //创建动画集对象  
            set.addAnimation(translateAnimation);       //添加位置变化动画  
            set.addAnimation(scaleAnimation);           //添加尺寸变化动画  
            set.addAnimation(alphaAnimation);           //添加透明度渐变动画  
            set.setFillAfter(true);                 //停留在最后的位置  
            set.setFillEnabled(true);  
            image.setAnimation(set);                    //设置动画  
            set.startNow();                         //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {    //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            set.cancel();                               //取消动画执行  
        }  
    });  
}  

 

 

 

2.通过xml实现动画效果

(1)透明度渐变效果

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:repeatMode="reverse">
    <alpha android:fromAlpha="0.2" android:toAlpha="1"
        android:repeatCount="infinite"/>
</set>

 


(2)缩放效果

 

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000">
    <scale android:fromXScale="0.2" android:toXScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
         android:fromYScale="0.2" android:toYScale="1"/>

</set>

 

(3)旋转效果

 

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:repeatMode="reverse">
    <alpha android:fromAlpha="0.2" android:toAlpha="1"
        android:repeatCount="infinite"/>
    <rotate android:fromDegrees="0" android:toDegrees="180"
        android:pivotX="50%p" android:pivotY="50%p"/>
    <!--android:pivotX="50%p"  50%p代表的是相对父容器的中心点旋转
    android:pivotX="50%"  50%代表的是相对自己的中心点旋转
    -->
</set>

 


(4)平移效果

 

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fillAfter="true"
    android:interpolator="@android:anim/overshoot_interpolator">
    <!--
    android:fillAfter="true" 设置是否保留最终状态 如果是集合,需要在set节点中设置
    android:interpolator="@android:anim/overshoot_interpolator"  如果有集合,插值器要放在集合的属性中-->
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="400"
        android:toYDelta="0"
        >
       <!-- android:repeatCount="infinite" 无限重复 只能在子节点中单独设置-->

    </translate>
</set>

 

(5)加载xml动画效果

//加载动画资源
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.translation_anim);
       //开启动画
        imageView.startAnimation(animation);

 

 

 

 



 

以上是关于Android分别通过代码和xml实现动画效果的主要内容,如果未能解决你的问题,请参考以下文章

Android 动画解释 - XML

Android动画——View动画

Android-通过Java代码来实现属性动画

如何通过android实现alpha渐变动画效果

Android动画-Property Animation

android动画笔记