Android开发 之 补间动画
2017-07-22 14:25
274 查看
安卓的补间动画
补间动画在动画界早都存在的技术,android是在2.0版本以后引进的。补间动画其实只是在屏幕上做了效果的绘制,其实组件的真是位置并没有发生改变。主要应用场景,组件,布局,fragment,activity都能使用这种动画技术本文以fragment的切换动画为例进行讲解:1.平移动画:如上图效果,左右平移的动画,对角平移那个渐变动画,下面会讲到。补间动画有自己的专属文件夹存放,在res目录下建立anim文件夹,在anim文件夹中创建自己想要的动画。创建进入页面的动画:translate_fragment.xml<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="100%" android:toXDelta="0" android:duration="500" android:fillAfter="true"> </translate>创建退出页面的动画:translate_fragment_out.xml
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="-100%" android:duration="500" android:fillAfter="true"> </translate>对以上属性进行解释:android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;android:toXDelta 结束点X轴坐标android:toYDelta 结束点Y轴坐标android:duration 动画持续时间,以毫秒为单位 android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态android:repeatCount 重复次数android:repeatMode 重复类型,有reverse和restart两4000个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。对动画xml的调用:下面代码的bt01按钮。
package th.zxq.com.quxianyundong; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.FrameLayout; import th.zxq.com.quxianyundong.fragments.fragment01; import th.zxq.com.quxianyundong.fragments.fragment02; import th.zxq.com.quxianyundong.fragments.fragment03; import th.zxq.com.quxianyundong.fragments.fragment04; /** * Created by Administrator on 2017/7/22. */ public class FragmentActivity extends AppCompatActivity { private FrameLayout fl; private FragmentManager sfm; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); fl= (FrameLayout) findViewById(R.id.fl); sfm = getSupportFragmentManager(); } public void button(View view) { switch (view.getId()) { case R.id.bt01: sfm.beginTransaction() .setCustomAnimations(R.anim.translate_fragment,R.anim.translate_fragment_out) .replace(R.id.fl,new fragment01()).commit(); break; case R.id.bt02: sfm.beginTransaction() .setCustomAnimations(R.anim.scale_fragment_in,R.anim.scale_fragment_out) .replace(R.id.fl,new fragment02()).commit(); break; case R.id.bt03: sfm.beginTransaction() .setCustomAnimations(R.anim.rotate_fragment,R.anim.rotate_fragment_out) .replace(R.id.fl,new fragment03()).commit(); break; case R.id.bt04: sfm.beginTransaction() .setCustomAnimations(R.anim.alpha_fragment_in,R.anim.alpha_fragment_out) .replace(R.id.fl,new fragment04()).commit(); break; } } }2.缩放动画:和上面一样,在anim文件中创建xml进入界面的动画:scale_fragment_in.xml
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="0" android:toXScale="1" android:fromYScale="0" android:toYScale="1" android:duration="500" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true"> </scale>退出界面的动画:scale_fragment_out.xml
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="1" android:toXScale="0" android:fromYScale="1" android:toYScale="0" android:duration="500" android:fillAfter="true"> </scale>属性解释:android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样。android:duration 动画持续时间,以毫秒为单位 android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态android:repeatCount 重复次数android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。代码调用:上面代码的bt023.旋转动画:创建进入动画:rotate_fragment.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="360" android:duration="1000" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true"> </rotate> <scale android:fromXScale="0" android:toXScale="1" android:fromYScale="0" android:toYScale="1" android:duration="1000" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true"> </scale> </set>这里用到一个动画集合,就是多个动画一起执行。因为旋转不加缩放的话很难看。创建退出动画:rotate_fragment_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="360" android:toDegrees="0" android:duration="500" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true"> </rotate> <scale android:fromYScale="1" android:toXScale="0" android:toYScale="0" android:fromXScale="1" android:duration="500" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" > </scale> </set>属性解释:android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%pandroid:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p其实属性和上面的一样。代码调用如上面代码的 bt034. 渐变动画创建进入动画:alpha_fragment_in.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0" android:toAlpha="1" android:duration="2000" android:fillAfter="true"> </alpha> <scale android:fromXScale="0" android:fromYScale="0"创建退出动画:alpha_fragment_out.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><alphaandroid:fromAlpha="1"android:toAlpha="0"android:duration="1000"android:fillAfter="true"></alpha><scaleandroid:fromXScale="1"android:fromYScale="1"android:toYScale="0"android:toXScale="0"android:duration="1000"android:fillAfter="true"android:pivotY="100%"android:pivotX="100%"></scale></set>属性解释:android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明其他和上面的一样代码调用如上面代码的bt04如果需要多个动画不同的动画一起执行就就创建一个动画集合set,如上面的旋转和渐变动画一样。ps:这些都是给fragment自定义的动画设置,必须使用v4包下的fragment,不然会报错。动画添加必须在替换fragment之前调用。也可以通过setTransition(FragmentTransaction.TRANSIT_ENTER_MASK)方法去设置系统自带的动画。这种设置可以不用管fragment是不是v4包的。例如:
case R.id.bt02:sfm.beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)// .setCustomAnimations(R.anim.scale_fragment_in,R.anim.scale_fragment_out).replace(R.id.fl,new fragment02()).commit();break;尊重他人,转载请注明出处,谢谢
相关文章推荐
- Android开发实战之补间动画和属性动画
- Android开发之Tween(补间动画)
- Android开发 之 activity跳转动画(补间动画跳转)
- 【Android开发】动画范例2-旋转、平移、缩放和透明度渐变的补间动画
- [置顶] Android开发总结之动画(帧动画+补间动画)
- Android开发动画之补间动画详情
- Android开发之Tween(补间动画)完全解析(下)——代码实现
- Android开发UI之补间动画-布局添加动画
- Android开发之Tween(补间动画)
- Android开发中的动画(上)--补间动画与帧动画
- Android开发(26)--补间动画(Tween)的实现
- Android开发(26)--补间动画(Tween)的实现
- Android开发UI之补间动画-Tween Animation
- Android开发之tween(补间动画)动画及其使用场景(界面切换、弹窗等)详解
- Android开发(26)--补间动画(Tween)的实现
- Android开发基础之-----------补间动画
- Android开发之Tween(补间动画)完全解析(上)——xml文件配置的实现
- android游戏开发5-10 补间动画 透明度渐变 旋转 缩放 平移
- android开发经验之动画一
- android 补间动画详解