七、Android动画
来源:互联网 发布:网络接入控制 编辑:程序博客网 时间:2024/06/06 04:22
Android的动画可以分为3种,View动画,帧动画和属性动画,其实帧动画也属于
View动画的一种,只不过它和平移,旋转等常见的View动画在表现形式上面略有
不同而已。
属性动画通过动态地改变对象的属性从而达到动画效果。
1.View动画种类
AlphaAnimation, RotateAnimation, ScaleAnimation, TranslateAnimation
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] > <alpha android:fromAlpha="float" android:toAlpha="float" /> <scale android:fromXScale="float" android:toXScale="float" android:fromYScale="float" android:toYScale="float" android:pivotX="float" android:pivotY="float" /> <translate android:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set></set>
这四种动画既可以通过XML来定义,也可以通过代码来动态创建,对于view动画来说,建议采用XML来定义动画。
set表示动画集合,对应AnimationSet类,可以包含若干个动画。
属性:
android:interpolator表示动画集合采用的插值器,插值器影响动画的速度,比如非匀速动画就需要通过插值器来控制动画的播放过程。可以不指定。默认@android:anim/accelerate_decelerate_interpolator,即加速减速插值器。
android:shareInterpolator表示集合中的动画是否和集合共享一个插值器,如果集合不指定插值器,那么子动画就需要单独指定所需的插值器或者使用默认值。
translate:表示平移动画,对应TranslateAnimation类,可以使一个View在水平和竖直方向完成平移的动画效果。
android:fromXDelta表示X的起始值,比如0;
android:toXDelta表示X的结束值,比如100;
android:fromYDelta表示Y的起始值;
android:toYDelta表示Y的结束值
scale:表示缩放动画,对应ScaleAnimation,可以使View具有放大或者缩小的动画效果。
android:fromXScale水平方向缩放的起始值,比如0.5;
android:toXScale水平方向缩放的结束值,比如1.2;
android:fromYScale竖直方向缩放的起始值;
android:toYScale竖直方向缩放的结束值;
android:pivotX缩放轴点的x坐标,它会影响缩放的效果;
android:pivotY缩放轴点的y坐标,它会影响缩放的效果;
rotate表示旋转动画,对应RotateAnimation类。
android:fromDegrees旋转开始的角度,比如0;
android:toDegrees旋转结束的角度,比如180;
android:pivotX旋转轴点的x坐标;
android:pivotY旋转轴点的y坐标;
alpha表示透明度动画,对应AlphaAnimation。
android:fromAlpha表示透明度的起始值,比如0.2;
android:toAlpha表示透明度的结束值,比如1;
还有些常用属性,android:duration持续时间android:fillAfter动画结束之后View是否停留在结束位置。
例子:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/accelerate_interpolator" android:startOffset="700"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:duration="400" /> </set></set>
2.帧动画
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" /></animation-list>
例子:
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /></animation-list>
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);rocketImage.setBackgroundResource(R.drawable.rocket_thrust);rocketAnimation = (AnimationDrawable) rocketImage.getBackground();rocketAnimation.start();
3.View动画的特殊使用场景
3.1.LayoutAnimation
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="0.5" android:animationOrder="reverse" android:animation="@anim/anim_item"/>
android:delay表示子元素开始动画的时间延迟,比如子元素入场动画的时间周期为300ms,那么0.5表示每个子元素都需要延迟150ms才能播放入场动画,总的来说,第一个子元素推迟150ms开始播放入场动画,第二个子元素延迟300ms开始播放入场动画,依次类推。
android:animationOrder表示子元素动画的顺序,有三种选项,normal,reverse和random其中normal表示顺序显示,即排在前面的子元素先播放入场动画,reverse表示逆向显示,即排在后面的子元素先开始播放入场动画,random则是随机播放入场动画。
android:animation为子元素指定具体的入场动画。
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:interpolator="@android:anim/accelerate_interpolator" android:shareInterpolator="true" > <alpha android:fromAlpha="0.0" android:toAlpha="1.0" /> <translate android:fromXDelta="500" android:toXDelta="0" /></set>
为ViewGroup指定android:layoutAnimation属性。
<ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layoutAnimation="@anim/anim_layout" android:background="#fff4f7f9" android:cacheColorHint="#00000000" android:divider="#dddbdb" android:dividerHeight="1.0px" android:listSelector="@android:color/transparent" />
还可以通过代码来指定:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_item);LayoutAnimationController controller = new LayoutAnimationController(animation);controller.setDelay(0.5f);controller.setOrder(LayoutAnimationController.ORDER_NORMAL);listView.setLayoutAnimation(controller);
3.2.Activity的切换效果
Activity有默认的切换效果,这个效果我们是可以自定义的,主要用到
overridePendingTransition(int enterAnim, int exitAnim)
这个方法。这个方法必须在startActivity()或者finish()之后调用才能生效。
参数含义:
enterAnim—Activity被打开时,所需要的动画资源id;
exitAnim—Activity被暂停时,所需的动画资源id;
当启动一个Activity时,可以按照如下方式添加自定义切换效果:
Intent intent = new Intent(this, TestActivity.class);startActivity(intent);
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
当Activity退出时,也可以指定切换效果:
@Override public void finish() { super.finish(); overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim); }
4.属性动画
- 七、Android动画
- Android属性动画---Property Animation(七)
- Android动画学习(七)之转场动画
- Android(Lollipop/5.0) Material Design(七) 自定义动画
- Android(Lollipop/5.0) Material Design(七) 自定义动画
- Android(Lollipop/5.0) Material Design(七) 自定义动画
- Android开发-RecyclerView-AndroidStudio(七)属性动画(4)ChangeDuration
- Android开发艺术探索__android动画深入分析(七)
- 动画特效七:碰撞动画
- Android自定义控件:动画类(七)----属性动画ValueAnimator高级进阶(二)
- 从零学Android(七)、Android资源类型之动画资源
- iOS动画进阶(七)隐式动画
- Android游戏开发之游戏帧动画的播放与处理(七)
- Android游戏开发之游戏帧动画的播放与处理(七)
- (转)Android游戏开发之游戏帧动画的播放与处理(七)
- Android游戏开发之游戏帧动画的播放与处理(七)
- Android 7.1 GUI系统-窗口管理WMS-动画的执行(七)
- Android动画--视图动画
- 前端题目
- bzoj2152: 聪聪可可
- 用位域进行base64 的解码;
- 52.iOS9 适配教程
- android图片的三级缓存
- 七、Android动画
- (9)Map按键和按键值排序
- ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)
- tableViewCell 自适应行高的坑
- bzoj3240: [Noi2013]矩阵游戏
- Spring framework IOC 学习笔记
- Intellij Idea 构建Java Web项目 + Tomcat集成
- 第四周项目 两个数最大公约数
- HDOJ 2022 海选女主角