动画学习 三
来源:互联网 发布:js获取页面停留时间 编辑:程序博客网 时间:2024/06/05 08:43
5.0以前的动画(Animation Resources方面)
包含以下两大类型:
属性动画(Property Animation)
使用Animator来创建,通过修改对象随时间变化的属性值来创建动画。
View动画(View Animation)
使用animation框架,包含两种类型的动画:
补间动画(Tween animation):通过使用Animation对单一图片进行一系列变化(旋转,移动,放大缩小等)来生成动画
帧动画(Frame animation):通过使用AnimationDrawable顺序显示一系列图片来生成动画
以下介绍如何在资源文件中定义上述动画:
一)属性动画(Property Animation)
文件位置:res/animator/
filename.xml
可编译的资源数据类型:
可以使用ValueAnimator
, ObjectAnimator
, 或 AnimatorSet类来指向该资源。
如何使用该资源:
In Java: R.animator.
filename
In XML: @[
package:]animator/
filename
语法:
<set
android:ordering=["together" |"sequentially"]>
<objectAnimator
android:propertyName="string"
android:duration="int"
android:valueFrom="float|int |color"
android:valueTo="float|int |color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" |"reverse"]
android:valueType=["intType" |"floatType"]/> //如果值是颜色时不需要指定该属性,animation框架会自动处理颜色值。
<animator
android:duration="int"
android:valueFrom="float|int |color"
android:valueTo="float|int |color"
android:startOffset="int"
android:repeatCount="int"
android:repeatMode=["repeat" |"reverse"]
android:valueType=["intType" |"floatType"]/>
<set>
...
</set>
</set>
例子如下:
res/animator/property_animator.xml
:
<set android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
</set>
在代码中这样使用:
AnimatorSet set = (AnimatorSet)AnimatorInflator.loadAnimator(myContext, R.anim.property_animator);
set.setTarget(myObject);
set.start();
二)View动画(View Animation)
补间动画(Tween animation)
文件位置:res/anim/
filename.xml
可编译的资源数据类型:
可以使用Animation
类来指向该资源。
如何使用该资源:
In Java: R.anim.
filename
In XML: @[
package:]anim/
filename
语法:
<?xmlversion="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" |"false"]>
<alpha //对应AlphaAnimation
android:fromAlpha="float"
android:toAlpha="float"/>
<scale //对应ScalAnimation
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float"/>
<translate //对应TranslateAnimation
android:fromXDelta="float" //5:像素绝对值,%5:想到自身的百分比,%5p:相对父类尺寸的百分比
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float"/>
<rotate //对应RotateAnimation
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float"/>
<set>
...
</set>
</set>
该文件必须有一个如下其中之一的根元素:<alpha>
, <scale>
, <translate>
, <rotate>
, 或<set>(包含一组动画,可嵌套)
。
例子如下:
res/anim/hyperspace_jump.xml
:
<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>
ImageView image = (ImageView) findViewById(R.id.imageview1);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this,R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
三)Interpolator
5.o以前的Interpolator
Interpolator class
Resource ID
AccelerateDecelerateInterpolator
@android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator
@android:anim/accelerate_interpolator
AnticipateInterpolator
@android:anim/anticipate_interpolator
AnticipateOvershootInterpolator
@android:anim/anticipate_overshoot_interpolator
BounceInterpolator
@android:anim/bounce_interpolator
CycleInterpolator
@android:anim/cycle_interpolator
DecelerateInterpolator
@android:anim/decelerate_interpolator
LinearInterpolator
@android:anim/linear_interpolator
OvershootInterpolator
@android:anim/overshoot_interpolator
可以通过设置 android:interpolator
属性来使用上述Interpolator:
<set android:interpolator="@android:anim/accelerate_interpolator">
...
</set>
如何自定义Interpolator
需要使用XML文件创建自己的,如可以修改AnticipateInterpolator的加速速率,或修改CycleInterpolator的循环次数。
文件位置:res/anim/
filename.xml
可编译的资源数据类型:
可以使用相应的interpolator类(见上表)来指向该资源。
如何使用该资源:
In XML:@[
package:]anim/
filename语法:
SYNTAX:
<?xmlversion="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
android:attribute_name="value"
/>
解释几个用到的属性:
android:factor 加速或减速速率,默认值为1,在<accelerateInterpolator>和<decelerateInterpolator>中用到。
android:tension
效果应用的强度,默认值为2,在<anticipateInterpolator>,<overshootInterpolator>和<anticipateOvershootInterpolator>中用到。
<anticipateInterpolator>是这样的动画效果:先向后然后急伸向前(The change starts backward then flings forward)。
<overshootInterpolator>是这样的动画效果:向前伸展并超过最后的值,然后反弹回来(
The change flings forward and overshoots the last value, then comes back)。当tension为0是没有向后的anticipation和向前的overshoot效果,就变成了一个简单的acceleration/deceleration插值器.
android:extraTension 在<anticipateOvershootInterpolator>中用到,用来跟tension相乘的, 默认值是1.5。<anticipateOvershootInterpolator>的动画效果是:先向后然后急伸向前并超过最后的值,然后稳定在最后的值上(The change starts backward, flings forward and overshoots the target value, then settles at the final value)。
例子如下:
res/anim/my_overshoot_interpolator.xml
:
<?xmlversion="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:tension="7.0"
/>
在资源文件中这样使用:
<scalexmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/my_overshoot_interpolator"
android:fromXScale="1.0"
android:toXScale="3.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700"/>
四)帧动画(Frame animation)
文件位置:res/drawable/
filename.xml
可编译的资源数据类型:
可以使用 AnimationDrawable
.来指向该资源。
如何使用该资源:
In Java:R.anim.
filename 或 R.drawable.
filenameIn XML:
@[
package:]anim.
filename 或 @[
package:]drawable.
filename语法:
<?xml version="1.0" encoding="utf-8"?>
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot=["true" |"false"] > //true:只播放一次,fasle:循环播放动画
<item
android:drawable="@[package:]drawable/drawable_resource_name"
android:duration="integer"/>
</animation-list>
例子如下:
res/anim/rocket.xml
:
<?xmlversion="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>
mView3 = (ImageView) findViewById(R.id.imageview3);
mView3.setImageResource(R.anim.rocket);
AnimationDrawable anim = (AnimationDrawable)mView3.getDrawable();
anim.start();
或在资源文件中这样使用:
<ImageView android:id="@+id/imageview3"
android:layout_width="130dp"
android:layout_height="30dp"
android:src="@anim/rocket"/>
- ios动画学习(三)
- 动画学习 三
- Android动画学习-Animation动画总述(三)
- 动画—Core Animation初步学习三:关键帧动画
- Android动画学习笔记(三)—基础动画小结
- android学习(十八) 添加动画(三) 显示卡片翻转动画
- Android动画学习三(Activity跳转动画)
- 绘图与动画学习笔记(三)
- ios学习笔记(三)简单动画
- Android动画学习之LayoutAnimation三
- android_animation三种动画学习总结
- Mecanim动画系统学习(三)
- SDL入门学习之三.加载BMP图片,实现动画
- GreenSock动画平台学习笔记(三)TimelineLite
- GreenSock动画平台学习笔记(三)TimelineLite
- Android动画学习总结(三)------- property animation
- Cocos2d-js 学习(三): 简单动画使用
- Unity_DOTween动画的学习(三)_Sequence的示例演示
- Spring MVC启动——initStrategies
- 【区间型DP】石子归并问题
- 提高 Linux 上 socket 性能
- +load +initialize
- Java基础学习总结(28)——Java对各种排序算法的实现
- 动画学习 三
- Android学习记录(二)
- 如何正确遍历删除List中的元素
- 组件和布局加载~LayoutInflater和findViewById() 的区别
- 在android 6.0以上无法获取READ_PHONE_STATE权限的SecurityException的问题
- android开发中常用快捷键
- Ubuntu下编译安装 OpenCV 3.1
- ORA-01403:no data found 解决办法
- The import javax.servlet.http.HttpServletRequest cannot be resolved