Activity的切换效果使用的是Android的动画效果,Android的动画在官方有相关资料:http://developer.android.com/guide/topics/graphics/animation.html和http://developer.android.com/guide/topics/resources/animation-resource.html ,Activity的切换动画实际上是Android的View Animation(视图动画)中的Tween Animation效果,Tween Animation分为4种动画效果,分别是:alpha (透明变化) translate(位置移动) scale(缩放) rotate(旋转), 而左右滑动切换使用的是 translate(位置移动)的效果,在下一篇我们再讨论一下 alpha (透明变化) 、scale(缩放)、 rotate(旋转) 这三种效果,本篇只将 translate(位置移动)。

Translate动画是非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。Android的translate移动方向有 横向(X) 竖向(Y), 左右滑动使用了横向移动效果,对于竖向(Y)的位置如下:

定义一个向上退出的动画(从位置2 移动位置3)和从下面进入(从位置1移动位置2)的动画定义文件如下:

out_to_up.xml (从屏幕上面退出)

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

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

android:fromYDelta="0%p"

android:toYDelta="-100%p"

android:duration="1000">

</translate>

in_from_down.xml (从屏幕下面进入)

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

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

android:fromYDelta="100%p"

android:toYDelta="0%p"

android:duration="1000">

</translate>

接下来讲一讲translate的几个重要的属性:

android:interpolator: 加速器,非常有用的属性,可以简单理解为动画的速度,可以是越来越快,也可以是越来越慢,或者是先快后忙,或者是均匀的速度等等,对于值如下:

@android:anim/accelerate_interpolator: 越来越快

@android:anim/decelerate_interpolator:越来越慢

@android:anim/accelerate_decelerate_interpolator:先快后慢

@android:anim/anticipate_interpolator: 先后退一小步然后向前加速

@android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点

@android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点

@android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点

@android:anim/linear_interpolator:均匀速度。

android:duration: 动画运行时间,定义在多次时间(ms)内完成动画

android:startOffset: 延迟一定时间后运行动画

fromXDelta: X轴方向开始位置,可以是%,也可以是具体的像素 具体见图

toXDelta:   X轴方向结束位置,可以是%,也可以是具体的像素

fromYDelta: Y轴方向开始位置,可以是%,也可以是具体的像素

toYDelta:    Y轴方向结束位置,可以是%,也可以是具体的像素

当你了解上面的属性后,你可以组合出很多有趣的位置移动效果。比如使用加速器:@android:anim/bounce_interpolator 可以产生弹球落地时的效果。

在实际项目中需要在进行只使用“左右上下滑动”的效果可能还不够炫,希望在切换时能产生更动态的效果,比如开始切换时第1个Activity先向后退一步,然后在向左方向退出屏幕。然后第2个Activity紧跟后面从右边进入屏幕,到达终点时有一个动态效果。在了解了动画加速器后,大家都知道可以采用:anticipate_overshoot_interpolator、anticipate_interpolator、overshoot_interpolator这三个加速器实现左右滑动切换时启动或者结束的动态效果。

动画文件定义如下:

dync_out_to_left.xml

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="500"

android:fromXDelta="0%p"

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

android:toXDelta="-100%p" />

dync_in_from_right.xml

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="500"

android:fromXDelta="100%p"

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

android:toXDelta="0%p" />

但是再使用以上动画配置,会出现以下问题:

1.     第1个Activity使用anticipate_interpolator时,开始移动时先向后退一步,然后向前移动。但向后退一步步伐太大,略显夸张,实际应用中只希望退后一小小步就行了。

2.     由于开始向后退一步,额外增加了移动时间,导致前一Activity和后一个Activity的时间不同步。

为了解决以上问题,重新定义动态效果,将第1个Activity的移动分为2个动画效果:(1)用200毫秒时间先向后移动2%p的位置 (2) 延迟200毫秒后从2%p位置向前移动到-100%p位置。 然后第2个Activity从延迟200毫秒然后从102%p位置移动到0%p位置。

动画定义如下:

new_dync_out_to_left.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"

android:shareInterpolator="false" >

<translate

android:duration="200"

android:fromXDelta="0%p"

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

android:toXDelta="2%p" />

<translate

android:duration="1000"

android:fromXDelta="2%p"

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

android:startOffset="200"

android:toXDelta="-100%p" />

</set>

new_dync_in_from_right.xml

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

android:duration="1000"

android:fromXDelta="102%p"

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

android:startOffset="200"

android:toXDelta="0%p" />

配套代码:http://www.oschina.NET/code/snippet_97118_7734

Android动画之translate(位移动画)上下移动相关推荐

  1. vue动画、vue位移动画、vue列表动画

    1.vue动画 1.1 vue动画设置 把需要显示隐藏做动画的标签放入transition组件中作为子标签 注意:transition标签要求仅有一个子标签,多余的不会渲染,如果需要在一个组件中实现多 ...

  2. android 同根动画_android 动画系列 (1) - tween 动画(view动画)

    这是我这个系列的目录,有兴趣的可以看下: android 动画系列 - 目录 tween 动画早些时候我们也叫补间动画(我也不知道为啥),现在也有叫 view 动画的.tween动画是2.X 时代的产 ...

  3. 在android中执行多个动画,Android上几种Animation和多个动画同时播放以ScaleAnimation应用详解...

    在API Demo的View->Animation下可以找到四个Animation的Demo,第一个3D Translate比较复杂,最后再讲,先讲第2个Interpolator.该Activi ...

  4. android 淡入位移动画,Android动画 translate(位移)、scale(缩放)、alpha(淡入淡出)、rotate(旋转)...

    一.Android动画类型 Android的animation由四种类型组成 在xml文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画 ...

  5. android image 位移动画_深入理解Android之动画

    Android 里动画从用途上讲,可以分为三类View Animation(View动画)又称 Tween Animation(补间动画).Drawable Animation(帧动画) 和 Prop ...

  6. android偏移动画,Android新手开发之旅-Android动画之位移动画

    本帖最后由 liu 于 2018-12-27 16:02 编辑 TranslateAnimation位移动画 实现有两种方式: 一.xml+java代码 在res下新建anim文件夹,在res/ani ...

  7. Android动画效果translate、scale、alpha、rotate详解

    动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面 ...

  8. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与g ...

  9. Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整

    2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中.默认在动画结束后回到动画前位置.设置android:fillAfter后 ...

最新文章

  1. mht to html
  2. Java简单知识梳理
  3. 移动IM开发指南1:如何进行技术选型
  4. Caffe 编译错误记录
  5. Nginx静态资源优化配置之tcp_nopush和tcp_nodelay
  6. Windows 运行... 可执行的命令
  7. c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”...
  8. 在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件(转)
  9. QTP提示加载数据表文件时出错的解决方案
  10. 程序员同事被包工头坑了,这社会很魔幻
  11. pytorch导入模型
  12. Windows系统安装Redis(详细)
  13. 【步骤详解】畅捷通T+Cloud无代码集成钉钉群机器人示例
  14. 【软件测试】使用C++ Test 进行静态测试
  15. 罗升阳 51test 博客
  16. 英雄联盟——心得体会
  17. MATLAB中的一些小技巧(2) - [MATLAB]
  18. kotlin用it还是this?
  19. html5 arc 椭圆,html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
  20. html调用头尾html,合并html头尾 - 基础支持 - 用gulp搭建前后分离的开发环�? - KK的小故事...

热门文章

  1. 蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输)
  2. 【UCenter】站点整合ucenter与discuz实现单点登录
  3. Java进行解析气象数据格式GRB2 ,根据经纬度查询某一格点数值
  4. 众筹在中国的四种模式
  5. 蓝海创意云丨3ds Max V-Ray 渲染水面教程
  6. 用户注册页面接入短信验证功能的注意点?
  7. 浙工大程序设计迎新赛预赛
  8. 通过USB接口与EFM8微控制器进行通信
  9. 600分左右的计算机院校,这11所985大学600分左右就能考,快来捡漏!
  10. 伴鱼事件分析平台设计