Android实现动画效果详解
目前Android平台提供了两类动画一类是Tween动画,第二类就是Frame动画,具体内容介绍请看下文:
一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
第二类就是Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。
实现动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定
1、透明度控制动画效果alpha
<!-- 透明度控制动画效果alpha 浮点型值: fromAlpha动画起始时透明度 toAlpha动画结束时透明度 说明:0.0完全透明 1.0完全不透明 以上值取0.0-1.0之间的float数据类型的数字 duration为动画持续时间 长整型: 说明:时间以毫秒为单位 --> <alpha android:duration="3000" android:fromAlpha="0.0" android:toAlpha="1.0"/>
代码方式:
AnimationanimationAlpha=newAlphaAnimation(0.0f,1.0f); animationAlpha.setDuration(3000); ivAnim.startAnimation(animationAlpha);
2、rotate旋转动画
<!-- rotate旋转动画效果 属性:interpolator指定一个动画的插入器 有三种动画插入器: accelerate_decelerate_interpolator加速-减速动画插入器 accelerate_interpolator加速-动画插入器 decelerate_interpolator减速-动画插入器 其他的属于特定的动画效果 浮点整型值: fromDegrees为动画起始时物件的角度 toDegrees为动画起始时物件旋转的角度可以大于360度 说明:当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转 负数from——to负数:逆时针旋转 正数from——to正数:顺时针旋转) pivotX为动画相对于物件的X坐标的开始位置 pivotY为动画相对于物件的Y坐标的开始位置 说明:以上两个属性值从0%——100%中取值 50%为物件的X或Y方向坐标上的中点位置 长整型类型: duration为动画持续时间 说明:时间以毫秒为单位 --> <rotate android:duration="3000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="+350"/>
AnimationanimationRotate=newRotateAnimation(0.0f,+350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); animationRotate.setDuration(3000); ivAnim.startAnimation(animationRotate);
3、尺寸伸缩动画效果scale
<!-- 尺寸伸缩动画效果scale 属性:interpolator指定一个动画的插入器 有三种动画插入器: 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%中取值 长整型: duration动画持续时间 说明:时间以毫秒为单位 布尔型值: fillAfter当设置为true,该动画转化在动画结束后被应用 --> <scale android:duration="700" android:fillAfter="false" android:fromXScale="0.0" android:fromYScale="0.0" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.4" android:toYScale="1.4"/>
代码方式:
AnimationanimationScale=newScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); animationScale.setDuration(3000); ivAnim.startAnimation(animationScale);
4、translate位置转移动画效果
<!-- translate位置转移动画效果 整型值: fromXDelta动画起始时X坐标上的位置 toXDelta动画结束时X坐标上的位置 fromYDelta动画起始时Y坐标上的位置 toYDlta动画结束时Y坐标上的位置 注意:没有指定fromXTratoXTypefromYTypetoYType时候,默认是以自己为相对参照物 长整型:duration为动画持续时间 时间以毫秒为单位 --> <translate android:duration="2000" android:fromXDelta="30" android:fromYDelta="30" android:toXDelta="-80" android:toYDelta="300"/>
AnimationanimationTranslate=newTranslateAnimation(30.0f,-80.0f,30.0f,300.0f); animationTranslate.setDuration(3000); ivAnim.startAnimation(animationTranslate);
xml文件方式使用的话就两行代码
Animationanim=AnimationUtils.loadAnimation(activity,R.anim.anim_xxx); ivAnim.startAnimation(anim);
5、frame帧动画(文件放在res/drawable)
<!-- 根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画 根标签下,通过item标签对动画中的每一个图片进行声明 android:duration表示展示所用的该图片的时间长度 --> <animation-listxmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/icon_frame1" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame2" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame3" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame4" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame5" android:duration="200"> </item> <item android:drawable="@drawable/icon_frame6" android:duration="50"> </item> </animation-list>xml帧动画使用代码:
ivFrame=(ImageView)findViewById(R.id.iv_frame_image); ivFrame.setImageResource(R.drawable.anim_frame); animation=(AnimationDrawable)ivFrame.getDrawable(); animation.setOneShot(false);//循环 animation.start();
以上就是针对Android实现动画效果的全部内容,希望大家能够喜欢。