zoukankan      html  css  js  c++  java
  • Android 之 补间动画

    补间动画的优点是可以节省空间。补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。目前Android应用框架支持的补间动画效果有以下5种。具体实现在android.view.animation类库中。

    (1)AlphaAnimation:

      透明度(alpha)渐变效果,对应<alpha/>标签。

    (2)TranslateAnimation:

      位移渐变,需要指定移动点的开始和结束坐标,对应<translate/>标签。

    (3)ScaleAnimation:

      缩放渐变,可以指定缩放的参考点,对应<scale/>标签。

    (4)RotateAnimation:

      旋转渐变,可以指定旋转的参考点,对应<rotate/>标签。

    (5)AnimationSet:

      组合渐变,支持组合多种渐变效果,对应<set/>标签。

    补间动画的效果同样可以使用XML文件来定义,这些动画文件会被放在Android项目的res/anim/目录下。

    实例:

    public class MainActivity extends Activity {
    
            private ImageView iv;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                iv = (ImageView) findViewById(R.id.iv);
            }
    
            public void click1(View v) {    
                //渐变效果-JavaCode实现方式
                AlphaAnimation ani = new AlphaAnimation(0.0f, 1.0f);
                ani.setDuration(2000);
                ani.setRepeatCount(2);
                ani.setRepeatMode(Animation.REVERSE);
                iv.startAnimation(ani);
            }
    
            public void click11(View v) {    
                //渐变效果-XML实现方式
                Animation ani = AnimationUtils.loadAnimation(this, R.anim.alpha_anim);
                iv.startAnimation(ani);
            }
    
            public void click2(View v) {
                //缩放渐变-JavaCode实现方式
                ScaleAnimation ani = new ScaleAnimation(0.0f, 2.0f, 0.0f, 2.0f,
                        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                        0.5f);
                ani.setDuration(2000);
                ani.setRepeatCount(2);
                ani.setRepeatMode(Animation.REVERSE);
                iv.startAnimation(ani);
            }
    
            public void click22(View v) {
                //缩放渐变-XML实现方式
                
                Animation ani = AnimationUtils.loadAnimation(this, R.anim.scale_ani);
                iv.startAnimation(ani);
            }
    
            public void click3(View v) {
                //旋转渐变效果-Javacode实现
                RotateAnimation ani = new RotateAnimation(0, 360,
                        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                        0.5f);
                ani.setDuration(2000);
                ani.setRepeatCount(2);
                ani.setRepeatMode(Animation.REVERSE);
                iv.startAnimation(ani);
            }
    
            public void click33(View v) {
                //旋转渐变效果-xml实现
                Animation ani = AnimationUtils.loadAnimation(this, R.anim.rotate_ani);
                iv.startAnimation(ani);
            }
    
            public void click4(View v) {
                //位移渐变效果-JavaCode实现
                TranslateAnimation ani = new TranslateAnimation(
                        Animation.RELATIVE_TO_PARENT, 0.0f,
                        Animation.RELATIVE_TO_PARENT, 1.0f,
                        Animation.RELATIVE_TO_PARENT, 0.0f,
                        Animation.RELATIVE_TO_PARENT, 1.0f);
                ani.setDuration(2000);
                ani.setRepeatCount(2);
                ani.setRepeatMode(Animation.REVERSE);
                iv.startAnimation(ani);
            }
    
            public void click44(View v) {
                //位移渐变效果-xml实现
                Animation ani = AnimationUtils.loadAnimation(this, R.anim.translate);
                iv.startAnimation(ani);
            }
    
        }
    View Code

    对应的XML动画效果文件

    alpha_anim.xml

    <?xml version="1.0" encoding="utf-8"?>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:fromAlpha="1.0"
        android:toAlpha="0.5"
        android:fillAfter="true"
        android:duration="2000" >
    </alpha>

    代码说明:

    透明度控制动画效果 alpha       

    浮点型值:           

      fromAlpha 属性为动画起始时透明度           

      toAlpha   属性为动画结束时透明度           

    说明:                

      0.0 表示完全透明               

      1.0 表示完全不透明           

      以上值取0.0-1.0之间的float数据类型的数字       

    长整型值:       

      duration  属性为动画持续时间           

    说明:                    

      时间以毫秒为单位

    rotate_ani.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:duration="2000" >
    
    </rotate>

    代码说明:

    fromDegrees:表示旋转的起始角度 

    toDegrees:表示旋转的结束角度 

    repeatCount:旋转的次数  默认值是0 代表旋转1次  如果值是repeatCount=4 旋转5次,值为-1或者infinite时,表示补间动画永不停止 

    repeatMode 设置重复的模式。默认是restart。当repeatCount的值大于0或者为infinite时才有效。

     repeatCount=-1 或者infinite循环了  还可以设成reverse,表示偶数次显示动画时会做与动画文件定义的方向相反的方向动行。

    scale_ani.xml

    <?xml version="1.0" encoding="utf-8"?>
    <scale xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromXScale="0.2"
        android:toXScale="2.0"
        android:fromYScale="0.2"
        android:toYScale="2.0"
        android:fillAfter="true"
        android:duration="2000" >
    
    </scale>

    代码说明:

    fromXScale:表示沿着x轴缩放的起始比例 

    toXScale:表示沿着x轴缩放的结束比例 

    fromYScale:表示沿着y轴缩放的起始比例 

    toYScale:表示沿着y轴缩放的结束比例 

    图片中心点: 

    android:pivotX="50%"

    android:pivotY="50%"

    translate.xml

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromXDelta="20%p"
        android:toXDelta="50%p"
        android:fromYDelta="0"
        android:toYDelta="50%p"
        android:duration="2000"
        android:repeatCount="2"
        android:repeatMode="reverse" >
    
    </translate>

    代码说明

    android:interpolator 动画的渲染器 

    accelerate_interpolator(动画加速器) 使动画在开始的时候 最慢,然后逐渐加速 

    decelerate_interpolator(动画减速器)使动画在开始的时候 最快,然后逐渐减速 

    accelerate_decelerate_interpolator(动画加速减速器) 

    中间位置分层:  使动画在开始的时候 最慢,然后逐渐加速          

    使动画在开始的时候 最快,然后逐渐减速  结束的位置最慢 

    fromXDelta  动画起始位置的横坐标 

    toXDelta    动画起结束位置的横坐标 

    fromYDelta  动画起始位置的纵坐标 

    toYDelta   动画结束位置的纵坐标 

    duration 动画的持续时间 

    参考地址:

      http://songfantasy.iteye.com/blog/1258980

      http://www.cnblogs.com/yydcdut/p/3829860.html

  • 相关阅读:
    微信小程序scroll-viwe遇到的问题
    微信小程序缓存
    微信刷新数据不刷新页面的另一个方法
    微信小程序中无刷新修改
    Bayesian
    深度学习(七)object detection
    深度学习(十二)wide&deep model
    深度学习(十)训练时的调参技巧
    深度学习(九)过拟合和欠拟合
    深度学习(二)常见概念
  • 原文地址:https://www.cnblogs.com/ywtk/p/3844928.html
Copyright © 2011-2022 走看看