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

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

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。

第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理相似。

 

以下就讲一下Tweene Animations。

 

主要类:

 

Animation   动画

AlphaAnimation 渐变透明度

RotateAnimation 画面旋转

ScaleAnimation 渐变尺寸缩放

TranslateAnimation 位置移动

AnimationSet  动画集

 

 

有了这些类,那么我们怎样来实现动画效果呢? 

 

以自己定义View为例,该View非常easy,画面上仅仅有一个图片。 如今我们要对整个View分别实现各种Tween动画效果。

 

AlphaAnimation

 

通过代码实现 AlphaAnimation,例如以下:

 

当中AlphaAnimation类第一个參数fromAlpha表示动画起始时的透明度, 第二个參数toAlpha表示动画结束时的透明度。 

setDuration用来设置动画持续时间。

 

RotateAnimation


代码:

 

当中RotateAnimation类第一个參数fromDegrees表示动画起始时的角度, 第二个參数toDegrees表示动画结束时的角度。 

另外还能够设置伸缩模式pivotXType、pivotYType, 伸缩动画相对于x,y 坐标的開始位置pivotXValue、pivotYValue等。

 

ScaleAnimation

代码:

 

ScaleAnimation类中

第一个參数fromX ,第二个參数toX:各自是动画起始、结束时X坐标上的伸缩尺寸。

第三个參数fromY ,第四个參数toY:各自是动画起始、结束时Y坐标上的伸缩尺寸。

另外还能够设置伸缩模式pivotXType、pivotYType, 伸缩动画相对于x,y 坐标的開始位置pivotXValue、pivotYValue等。

 

TranslateAnimation

代码:

 

TranslateAnimation类

 

第一个參数fromXDelta ,第二个參数toXDelta:各自是动画起始、结束时X坐标。

第三个參数fromYDelta ,第四个參数toYDelta:各自是动画起始、结束时Y坐标。

 

參数具体说明:

表二

XML节点 功能说明
alpha 渐变透明度动画效果
<alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />
fromAlpha

属性为动画起始时透明度

0.0表示全然透明
1.0表示全然不透明
以上值取0.0-1.0之间的float数据类型的数字
toAlpha 属性为动画结束时透明度

表三

scale 渐变尺寸伸缩动画效果
<scale
android:interpolator= “@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />
fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
toXScale [float]
toYScale[float]
为动画结束时,X、Y坐标上的伸缩尺寸
pivotX[float]
pivotY[float]
为动画相对于物件的X、Y坐标的開始位置 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
       

表四

translate 画面转换位置移动动画效果
<translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />
fromXDelta
toXDelta
为动画、结束起始时 X坐标上的位置  
fromYDelta
toYDelta
为动画、结束起始时 Y坐标上的位置  
       

表五

rotate 画面转移旋转动画效果
<rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />
fromDegrees 为动画起始时物件的角度 说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)
toDegrees 属性为动画结束时物件旋转的角度 能够大于360度
pivotX
pivotY
为动画相对于物件的X、Y坐标的開始位 说明:以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
       

 

以上都是单独的使用某个动画,那么怎样让多个动画同一时候生效呢?


答案是 AnimationSet。  

初看整个类名,还以为仅仅是用来存放 Animation的一个Set, 细看才发现,该类也是继承自 Animation的。

 

以下我们实现一个动画,该动画会让图片移动的同一时候,图片透明度渐变,直接看代码吧。

 

 

是不是认为非常easy呢?

 

 

附上整个View类的代码吧。

 

 

在Activity中调用该类时,须要注意一定setFocusable(true), 否则焦点在Activity上的话,onKeyUp方法是不会生效的。

调用该View的代码:

 

 

 

 


 

上面通过Java代码,实现了4中不同的Tween动画,事实上在Android中全然能够通过 XML文件来实现动画。这样的方式可能更加简洁、清晰,也更利于重用。 

以下我们分别对这几种动画改用xml来实现。

 

首先是AlphaAnimation。

alpha_anim.xml:

 

 

不用解释了吧。

 

RotateAnimation

rotate_anim.xml:

 

 

 

ScaleAnimation

scale_anim.xml:

 

 

TranslateAnimation

translate_anim.xml:

 

 

 

布局文件都已经写完,那么怎样来使用这些文件呢?

 

事实上也非常easy,此时须要用到AnimationUtils类。 通过该类中 loadAnimation 方法来载入这些布局文件。

如:

 

 

这次View类的代码例如以下:

 

 

好了,本次就这么多。

 

參考: http://www.moandroid.com/?p=790

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118330.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月7日 下午6:00
下一篇 2021年12月7日 下午7:00


相关推荐

  • 一文读懂智能体:从概念到应用

    一文读懂智能体:从概念到应用

    2026年3月12日
    2
  • CUDA学习(四十)

    CUDA学习(四十)

    2022年3月13日
    56
  • DM368_了解电脑硬件基本知识

    DM368_了解电脑硬件基本知识最近到了找工作准备期,之前已将C语言、数据结构与算法、APUE总结完毕,现在需要抓紧将以往项目加以总结。关于DM368首先我们先从硬件部分开始讲起,然后再讲环境搭建、系统移植、文件烧写、最后程序开发。一、认识开发板参看下面网址可下载DM368参考原理图和Gerber文件。参看:EVMDM368SupportHome参看:EVMDM365SupportHomeDM365与DM

    2022年8月13日
    10
  • div居中方法(共9种)

    div居中方法(共9种)div 居中方法 共 8 种 水平居中行级元素 为该行级元素的父元素设置 text align center 配合 line height 样式 divstyle width 500px height 100px line height 100px border 1pxsolidgree text align center span 行级元素 span 块级元素 为其自身设置 margin auto 样式 divstyle width 500px height 100px line height 100px border 1pxsolidgree text align center

    2026年3月18日
    1
  • 哈希码总结:

    哈希码总结:哈希码一哈希码在 Java 中 哈希码代表了对象的一种特征 例如我们判断某两个字符串是否 如果其哈希码相等 则这两个字符串是相等的 其次 哈希码是一种数据结构的算法 常见的哈希码的算法有 1 Object 类的 hashCode 返回对象的内存地址经过处理后的结构 由于每个对象的内存地址都不一样 所以哈希码也不一样 2 String 类的 hashCode 根据 String 类包含的字符串的内容

    2026年3月19日
    1
  • 无线网络技术—wimax技术

    无线网络技术—wimax技术一 wimax 简介全球微波接入互操作性 WorldInterop WiMAX WiMAX 的另一个名字是 802 16 IEEE802 16 标准 又称 WiMAX 或广带无线接入 BroadbandWir BWA 标准 它是一项无线城域网 WMAN 技术 是针对微波和毫米波频段提出的一种新的空中接口标准 它用于将 802 11a 无线接入热点连接到互联网 也可连结公司与家庭等环境至有线骨干线路 它可作为线缆和 DSL 的无线扩展

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号