Pro Android学习笔记(一一三):2D动画(8):Property Animation(中)
2014-08-06 11:10
453 查看
文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying以及作者@恺风Wei。
public void sequentialAnimation(View v){
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(tv, "alpha", 0.0f);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(tv, "alpha", 1.0f);
AnimatorSet as = new AnimatorSet();
as.playSequentially(fadeOut,fadeIn); //可以带多个参数,依次执行
as.setDuration(5000); //相当于fadeOut.setDuration(5000); fadeIn.setDuration(5000);
as.start();
}
小例子会先执行5秒的淡出,然后执行5秒的淡入。AnimationSet通过playSequentailly()执行多个动画的串行效果,通过playTogether()执行多个动画的并行效果。
public void builderAnimation(View v){
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(tv, "alpha", 0.0f);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(tv, "alpha", 1.0f);
AnimatorSet as = new AnimatorSet();
//as.play(animator)返回一个AnimatorSet.Builder对象,Builder是一个工具栏,提供方法有after(animator),before(animator)和with(animator),而这些方法的返回值也是Builder,因此我们可以继续进行相关的操作。
as.play(fadeOut).before(fadeIn);
as.setDuration(5000);
as.start();
}
<?xml version="1.0" encoding="utf-8"?>
<set android:ordering="sequentially"
xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="1.0"
android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="5000" />
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="0.0"
android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="5000" />
</set>
相关的代码片段如下:
public void xmlAnimation(View v){
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.fade);
set.setTarget(tv);
set.start();
}
public void pvHolderTest(View v){
//获取当前状态
float h = tv.getHeight();
float w = tv.getWidth();
float x = tv.getX();
float y = tv.getY();
Log.v("WEI","current : heigth=" + h + " width=" + w + " x=" + x + " y=" + y);
//设置初始值:将view初始位置放在右下角,并设置为不可视
tv.setX(w);
tv.setY(h);
tv.setAlpha(0.0f);
//通过PropertyValuesHolder设置目标值,分别针对x,y和alpha三个属性进行设置
PropertyValuesHolder pvX = PropertyValuesHolder.ofFloat("x", x);
PropertyValuesHolder pvY = PropertyValuesHolder.ofFloat("y", y);
PropertyValuesHolder pvA = PropertyValuesHolder.ofFloat("alpha", 1.0f);
//通过ObjectAnimator.ofPropertyValuesHolder()可以同时设置多个目标值
ObjectAnimator oa = ObjectAnimator.ofPropertyValuesHolder(tv,pvX,pvY,pvA);
oa.setDuration(5000);
oa.setInterpolator(new AccelerateDecelerateInterpolator());
oa.start();
}
小例子代码在:Pro Android学习:2D动画小例子
相关链接:我的Android开发相关文章
AnimatorSet
在ObjectAnimation的例子中,我们给出了某个动画,我们可以通过监听AniamtorListener,在某个动画结束之际,开启下一个动画,我们可以直接使用AnimationSet来设置一组动画,实现同样的效果。public void sequentialAnimation(View v){
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(tv, "alpha", 0.0f);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(tv, "alpha", 1.0f);
AnimatorSet as = new AnimatorSet();
as.playSequentially(fadeOut,fadeIn); //可以带多个参数,依次执行
as.setDuration(5000); //相当于fadeOut.setDuration(5000); fadeIn.setDuration(5000);
as.start();
}
小例子会先执行5秒的淡出,然后执行5秒的淡入。AnimationSet通过playSequentailly()执行多个动画的串行效果,通过playTogether()执行多个动画的并行效果。
AnimatorSet.Builder
AnimatorSet可以实现并行或串行的变化。我们还可以利用Animator.Builder实现更为精细的控制,代码片段如下:public void builderAnimation(View v){
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(tv, "alpha", 0.0f);
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(tv, "alpha", 1.0f);
AnimatorSet as = new AnimatorSet();
//as.play(animator)返回一个AnimatorSet.Builder对象,Builder是一个工具栏,提供方法有after(animator),before(animator)和with(animator),而这些方法的返回值也是Builder,因此我们可以继续进行相关的操作。
as.play(fadeOut).before(fadeIn);
as.setDuration(5000);
as.start();
}
AnimatorInfalter和XML文件
可以通过XML文件定义ObjectAnimator、AnimatorSet、ValueAnimator(xml的tag为animator)。虽然没有强制要求,但是一般该XML文件位于res/animator目录之下。<?xml version="1.0" encoding="utf-8"?>
<set android:ordering="sequentially"
xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="1.0"
android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="5000" />
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="0.0"
android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="5000" />
</set>
相关的代码片段如下:
public void xmlAnimation(View v){
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.fade);
set.setTarget(tv);
set.start();
}
PropertyValuesHolder
在前面的例子中,我们只对单一的属性alpha进行渐变,我们也学习了可以让多个动画并行进行的方法。PropertyValuesHolder提供了另一并行方法,在每次变化中,可以一次性修改相应的属性,比之前的并行动画要更为高效,下面是例子的代码片段:public void pvHolderTest(View v){
//获取当前状态
float h = tv.getHeight();
float w = tv.getWidth();
float x = tv.getX();
float y = tv.getY();
Log.v("WEI","current : heigth=" + h + " width=" + w + " x=" + x + " y=" + y);
//设置初始值:将view初始位置放在右下角,并设置为不可视
tv.setX(w);
tv.setY(h);
tv.setAlpha(0.0f);
//通过PropertyValuesHolder设置目标值,分别针对x,y和alpha三个属性进行设置
PropertyValuesHolder pvX = PropertyValuesHolder.ofFloat("x", x);
PropertyValuesHolder pvY = PropertyValuesHolder.ofFloat("y", y);
PropertyValuesHolder pvA = PropertyValuesHolder.ofFloat("alpha", 1.0f);
//通过ObjectAnimator.ofPropertyValuesHolder()可以同时设置多个目标值
ObjectAnimator oa = ObjectAnimator.ofPropertyValuesHolder(tv,pvX,pvY,pvA);
oa.setDuration(5000);
oa.setInterpolator(new AccelerateDecelerateInterpolator());
oa.start();
}
小例子代码在:Pro Android学习:2D动画小例子
相关链接:我的Android开发相关文章
相关文章推荐
- Pro Android学习笔记(一一十):2D动画(5):Camera
- Pro Android学习笔记(一一一):2D动画(6):AnimationListener
- Pro Android学习笔记(一一四):2D动画(9):Property Animation(下)
- Pro Android学习笔记(一零七):2D动画(2):layout渐变动画
- Pro Android学习笔记(一零八):2D动画(3):view动画的小例子
- Pro Android学习笔记(一零九):2D动画(4):view的Matrix
- Pro Android学习笔记(一一四):2D动画(9):Property Animation(下)
- Pro Android学习笔记(一零六):2D动画(1):frame by frame
- Pro Android学习笔记(一一二):2D动画(7):Property Animation(上)
- coco2d-x 使用Action中的Animate实现动画效果
- Unity3D游戏开发之使用Mecanim动画系统控制2D动画
- Mathcad 是一种工程计算软件,主要运算功能:代数运算、线性代数、微积分、符号计算、2D和3D图表、动画、函数、程序编写、逻辑运算、变量与单位的定义和计算等。
- Android学习笔记——属性动画
- unity2d之2d帧动画创建
- Unity3D 2D动画插件EasyMotion2D (之十三)BitmapFontRenderer
- 【Android2D游戏开发十四】(未完待续)手把手教你在SurfaceView中照样使用Android 动画—Tween Animation!
- CitrusEngine系列教程四:Citrus的2D动画和摄像头
- android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
- 1-7:2D转换、动画