Anim学习总结

来源:互联网 发布:领主mk vii数据 编辑:程序博客网 时间:2024/06/06 04:12

一、ListView淡入动画效果的实现

(1)、首先,定义每个item的动画效果,在res目录下,创建anim目录,创建以下文件list_anim.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"  android:interpolator="@android:anim/accelerate_interpolator"  android:shareInterpolator="true" >  <alpha    android:duration="1000"    android:fromAlpha="0.0"    android:toAlpha="1.0" /></set>

(2)、为lv创建动画文件list_anim_layout.xml

<?xml version="1.0" encoding="utf-8"?><layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"    android:delay="2"    android:animationOrder="normal"    android:animation="@anim/list_anim"/>

(3)、在布局文件中,为lv添加动画

<!-- android:layoutAnimation="@anim/list_anim_layout"  这句话是添加列表控件的动画,也可以在代码中实现 -->    <ListView      android:id="@id/android:list"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:drawSelectorOnTop="false"      android:scrollbars="vertical"      android:layoutAnimation="@anim/list_anim_layout"/>

(4)、在代码中,为lv添加动画效果
推荐在代码中添加,因为在布局中设置,来回刷新,导致只能在第一次进入时,有动画效果
以下代码,放在adapter刷新之前就行:

    // 在代码中实现列表动画  Animation animation = (Animation) AnimationUtils.loadAnimation(          mContext, R.anim.list_anim);  LayoutAnimationController lac = new LayoutAnimationController(animation);  lac.setDelay(0.4f);  //设置动画间隔时间  lac.setOrder(LayoutAnimationController.ORDER_NORMAL); //设置列表的显示顺序  lv.setLayoutAnimation(lac);  //为lv添加动画

二、Drawable动画详解

Drawable动画 作用 加载Drawable资源,实现帧动画 AnimationDrawable类定义 实现Drawable动画的基本类 实现方式 推荐 用XML文件的方法 不推荐 在代码中实现 XML文件 在工程中的存放位置 res/drawable/目录下 指令(即属性) 动画播放的顺序和时间间隔 animation-list元素 根节点 item节点 定义了每一帧,表示一个drawable资源的帧和帧间隔

例如:

<animation-list android:oneshot="true"  xmlns:android="http://schemas.android.com/apk/res/android">    <item android:duration="266" android:drawable="@drawable/init_bg_00" />    <item android:duration="66" android:drawable="@drawable/init_bg_01" />                ...    <item android:duration="66" android:drawable="@drawable/init_bg_26" /></animation-list>
ImageView iv_anim.setImageResource(R.drawable.init_bg_anim);AnimationDrawable animationDrawable = (AnimationDrawable) iv_anim.getDrawable();animationDrawable.start();
使用动画需要注意的点 start()方法 不能在onCreate()函数中调用。 理由 AnimationDrawable并未完全关联到Window,onCreate()方法,View并未完成显示 同理 在此方法中,测量某个View的宽高,常得到0值 同理 SurfaceHolder要增加Callback方法 最快的启动动画 使用监听方法onWindowFoucsChanged() 此处 放进handler中解决该问题
handler.postDelayed(new Runnable() {            public void run() {                 iv_anim.setImageResource(R.drawable.init_bg_anim);                 AnimationDrawable ad= (AnimationDrawable) iv_anim.getDrawable();                 ad.start();                 setTimerTask01();            }}, 1000);

三、动画加载的步骤

Animation  loadAnimation=AnimationUtils.loadAnimation (getApplicationContext(), R.anim.anim);image.setAnimation(loadAnimation);                  //为控件设置动画loadAnimation.setFillAfter(true);                   //停留在结束位置loadAnimation.setFillEnabled(true);loadAnimation.startNow();                           //开始动画loadAnimation.cancel();                             //取消动画执行
AnimationDrawable animationDrawable = (AnimationDrawable)iv_anim.getDrawable();animationDrawable.stop();iv_anim.setImageResource(R.drawable.init_model);
Animation animation = AnimationUtils.loadAnimation(context,R.anim.init_iamge_big);iv_anim.startAnimation(animation);

四、android:pivotX

android:pivotX android:pivotX 相对于物件的X、Y坐标的位置,从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置 android:pivotX 表示缩放的中轴点X坐标,距离自身左边缘的位置,比如以图象的中心为中轴点,就是50%

五、控制图片缩放的scale动画

//加速

android:interpolator="@android:anim/accelerate_interpolator"

//减速

android:interpolator="@android:anim/decelerate_interpolator"
interpolator 控制动画的进度 作用1 修饰动画效果,定义一个动画的变化率(the rate of change)变化速度。 作用2 实现匀速、正加速、负加速、无规则变加速等。 然后3 加速,减速,重复,弹跳 基本动画效果 与interpolator的联系 4种 alpha, scale, translate, rotate 常用方法 基类,封装了所有 Interpolator 的共同方法 常用方法 只有一个方法getInterpolation (float input) 几个 Interpolator 子类 实现了不同的速度曲线 AccelerateDecelerateInterpolator 在动画开始与介绍处,速率改变比较慢,在中间时加速 AccelerateInterpolator 在动画开始处,速率改变比较慢,然后开始加速 CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线 DecelerateInterpolator 在动画开始处,速率改变比较慢,然后开始减速 LinearInterpolator 在动画的以均匀的速率改变

六、ScaleAnimation

Animation scaleAnimation = new ScaleAnimation(0.1f, 1.0f,0.1f,1.0f);//初始化scaleAnimation.setDuration(500); //设置动画时间this.startAnimation(scaleAnimation);
ScaleAnimation类中 第一个参数 fromX 动画起始时,X坐标上的伸缩尺寸。 第二个参数 toX 动画结束时,X坐标上的伸缩尺寸。 第三个参数 fromY 动画起始时,Y坐标上的伸缩尺寸。 第二个参数 toX 动画结束时,X坐标上的伸缩尺寸。 第四个参数 toY 动画结束时,Y坐标上的伸缩尺寸。 伸缩模式 设置pivotXType 伸缩动画相对于x,y 坐标的开始位置pivotXValue 设置 pivotYType 伸缩动画相对于x,y 坐标的开始位置pivotYValue
<scale>    <scale xmlns:android="http://schemas.android.com/apk/res/android"        android:interpolator="@android:anim/accelerate_interpolator"        android:fromXScale="1.0"          //表示沿着x轴缩放的起始比例        android:toXScale="1.5"             //表示沿着x轴缩放的结束比例        android:fromYScale="1.0"          //表示沿着y轴缩放的起始比例,        android:toYScale="1.5"            //表示沿着y轴缩放的结束比例        android:pivotX="50%"              //设置动画相对于控件的 x 坐标的位置        android:pivotY="50%"              //设置动画相对于控件的 y 坐标的位置        android:duration="2000"/></scale>

七、动画的分类,特点以及区别

动画的分类 Tween动画 使视图组件移动、放大、缩小以及产生透明度的变化 Frame动画 传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影

八、几种动画类型

几种动画类型

Property Animation 通过动画的方式,改变对象的属性 动画的执行类,来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。 Duration 动画的持续时间,默认300ms。 Time interpolation 时间差值,定义动画的变化率 Repeat count and behavior 重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向 Animator sets 动画集合,可定义一组动画,一起执行或者顺序执行。 Frame refresh delay 帧刷新延迟,对于动画,多久刷新一次帧;默认为10ms,但最终依赖系统的当前状态;基本不用管。 相关的类 ObjectAnimator 动画的执行类 ValueAnimator 动画的执行类 AnimatorSet 控制一组动画的执行:线性,一起,每个动画的先后执行等 AnimatorInflater 用户加载属性动画的xml文件 TypeEvaluator 类型估值,用于设置动画操作属性的值 TimeInterpolator 时间插值

ObjectAnimator实现动画

ObjectAnimator.ofFloat(view, "rotationX", 0.0F, 360.0F) .setDuration(500) .start();

ObjectAnimator

ObjectAnimator

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "zhy", 1.0F, 0.0F).setDuration(500);anim.start();anim.addUpdateListener(new AnimatorUpdateListener() {    public void onAnimationUpdate(ValueAnimator animation) {        float cVal = (Float) animation.getAnimatedValue();        view.setAlpha(cVal);        view.setScaleX(cVal);        view.setScaleY(cVal);    }});

九、overridePendingTransition的简介

Activity的切换动画 从一个activity跳转到另外一个activity时的动画 两个部分 第一个activity退出时的动画 第二个activity进入时的动画 两个部分 第一个activity退出时的动画 第二个activity进入时的动画 Android的2.0版本之后 overridePendingTransition实现改动画 两个参数之参数一 第一个activity进入时的动画 两个参数之参数二 第二个activity退出时的动画 注意点1 必须紧挨着startActivity()或者finish()函数之后调用 注意点2 只在android2.0以及以上版本上适用 函数不起作用的原因 android系统版本2.0以下 没办法 在ActivityGroup等的嵌入式Activity中 使用以下代码解决this.getParent().overridePendingTransition 在Activity内部类或匿名类中 使用handler来解决 手机的显示动画效果被人为关闭 设置->显示->显示动画效果

使用范例:

Intent intent = new Intent();intent.setClass(SplashActivity.this, MainActivity.class);startActivity(intent);overridePendingTransition(R.anim.splash_screen_fade, R.anim.splash_screen_hold);SplashActivity.this.finish();

R.anim.splash_screen_fade :

<?xml version="1.0" encoding="UTF-8"?><alpha xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="@android:integer/config_shortAnimTime"    android:fromAlpha="0.0"    android:interpolator="@android:anim/accelerate_interpolator"    android:toAlpha="1.0" />

R.anim.splash_screen_hold :

<?xml version="1.0" encoding="UTF-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="@android:integer/config_shortAnimTime"    android:fromXDelta="0.0"    android:interpolator="@android:anim/accelerate_interpolator"    android:toXDelta="0.0" />
0 0
原创粉丝点击