安卓动画(二)--补间动画

补间动画

上一篇讲了帧动画,比较简单的安卓动画,下面来总结下补间动画。
总的来说,补间动画分为四类,分别是旋转,缩放,平移,透明度
然后把他们也可以各种组合在一起进行
这里写图片描述
这里写图片描述

原理

补间动画之所以叫补间,原因很简单,我们只需要写动画开始的帧和结束的状态帧,利用插值器和估值器,来控制动画变化率和具体的变化的值
插值器(Interpolator)决定 值 的变化模式(匀速、加速blabla)
估值器(TypeEvaluator)决定 值 的具体变化数值

实现过程

也是有两种方式,一种java方式另一种xml的方式,不过这个还是强烈推荐用xml方式,在这里也是只说xml方式
第一步:在res文件夹下创建anim文件夹
这里写图片描述
第二步:在anim文件夹里面创建你要写的动画xml文件
这里写图片描述
第一行是这个xml文件的名字
第二行是xml的补间动画的分类就五种 Alpha(透明度) Scale(缩放) Translate(平移) Rotate(旋转) Set(组合)//这个也是xml文件的根标签
关键是在xml里面定义属性 公共属性和特有属性值
基本属性:
android:duration=”3000” // 动画持续时间(ms),必须设置,动画才有效果
android:startOffset =”1000” // 动画延迟开始时间(ms)
android:fillBefore = “true” // 动画播放完后,视图是否会停留在动画开始的状态,默认为true
android:fillAfter = “false” // 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
android:fillEnabled= “true” // 是否应用fillBefore值,对fillAfter值无影响,默认为true
android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart
android:repeatCount = “0” // 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复
android:interpolator = @[package:]anim/interpolator_resource // 插值器,即影响动画的播放速度,下面会详细讲
特有属性:
透明度动画特有的属性
android:fromAlpha=”1.0” // 动画开始时视图的透明度(取值范围: -1 ~ 1)
android:toAlpha=”0.0”// 动画结束时视图的透明度(取值范围: -1 ~ 1)
旋转动画特有的属性
android:duration=”1000”
android:fromDegrees=”0” // 动画开始时 视图的旋转角度(正数 = 顺时针,负数 = 逆时针) android:toDegrees=”270” // 动画结束时 视图的旋转角度(正数 = 顺时针,负数 = 逆时针) android:pivotX=”50%” // 旋转轴点的x坐标
android:pivotY=”0” // 旋转轴点的y坐标 // 轴点 = 视图缩放的中心点
repeatCount:旋转的次数,默认值为0,代表一次,假如是其他值,比如3,则旋转4次 另外,值为-1或者infinite时,表示动画永不停止
平移动画特有的属性
android:fromXDelta=”0” // 视图在水平方向x 移动的起始值
android:toXDelta=”500” // 视图在水平方向x 移动的结束值
android:fromYDelta=”0” //视图在竖直方向y 移动的起始值
android:toYDelta=”500” // 视图在竖直方向y 移动的结束值
缩放动画特有的属性
android:fromXScale=”0.0” // 动画在水平方向X的起始缩放倍数
0.0表示收缩到没有;1.0表示正常无伸缩 // 值小于1.0表示收缩;值大于1.0表示放大
android:toXScale=”2” //动画在水平方向X的结束缩放倍数
android:fromYScale=”0.0” //动画开始前在竖直方向Y的起始缩放倍数
android:toYScale=”2” //动画在竖直方向Y的结束缩放倍数

android:pivotX=”50%” // 缩放轴点的x坐标
android:pivotY=”50%” // 缩放轴点的y坐标
轴点 = 视图缩放的中心点 // pivotX pivotY,可取值为数字,百分比,或者百分比p
1设置为数字时(如50),轴点为View的左上角的原点在x方向和y方向加上50px的点。在Java代码里面设置这个参数的对应参数是Animation.ABSOLUTE。
2设置为百分比时(如50%),轴点为View的左上角的原点在x方向加上自身宽度50%和y方向自身高度50%的点。在Java代码里面设置这个参数的对应参数是Animation.RELATIVE_TO_SELF。 /
3设置为百分比p时(如50%p),轴点为View的左上角的原点在x方向加上父控件宽度50%和y方向父控件高度50%的点。在Java代码里面设置这个参数的对应参数是Animation.RELATIVE_TO_PARENT
这里写图片描述
合在一起
采用set标签
先公共属性部分
组合动画独特的属性 android:shareinterpolator = “true” // 表示组合动画中的动画是否和集合共享同一个差值器 ,如果集合不指定插值器,那么子动画需要单独设置
然后设置各个动画属性
这里写图片描述
第四步:在Java代码中绑定动画
1创建Animation对象,绑定动画xml
Animation translateAnimation = AnimationUtils.loadAnimation(this,R.anim.setview);
2控件播放动画//show是一个ImageView
show.startAnimation(translateAnimation);

在其他方面的应用

Activity 的切换效果
Fragement 的切换效果
视图组(ViewGroup)中子元素的出场效果
淡入淡出效果

活动之间的跳转
启动的动画

Intent intent = new Intent (this,Acvtivity.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
// 采用overridePendingTransition(int enterAnim, int exitAnim)进行设置
// enterAnim:从Activity a跳转到Activity b,进入b时的动画效果资源ID
// exitAnim:从Activity a跳转到Activity b,离开a时的动画效果资源Id
// 特别注意 // overridePendingTransition()必须要在startActivity(intent)后被调用才能生效

退出的动画

@Override
public void finish(){
    super.finish();
   overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);
// enterAnim:从Activity a跳转到Activity b,进入b时的动画效果资源ID
// exitAnim:从Activity a跳转到Activity b,离开a时的动画效果资源Id
/ overridePendingTransition()必须要在finish()后被调用才能生效

两种自定义效果
淡入和染出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha android:duration="1500"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha android:duration="1500"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>

自定义滑动的效果
这里写图片描述
移动的单位有三种
1x普通数字
2x%自己布局的占的比例位置
3x%p父布局占的比例位置
从状态2—状态3

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate android:duration="500"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
</set>

从状态3–状态2

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate android:duration="500"
android:fromXDelta="100%p" android:toXDelta="0%p" />
</set>

总结

补间动画的基本原理其实蛮简单的,开始的帧和结束的帧设定好,按照步骤一步一步来,哇哇哇互联网+比赛项目头都大了哇咔咔难得学下东西

猜你喜欢

转载自blog.csdn.net/sakurakider/article/details/80303044