ordering customer的属性中除了sequentially还有什么属性吗

Android属性动画Property Animation系列(4)_AnimatorSet - 推酷
Android属性动画Property Animation系列(4)_AnimatorSet
AnimatorSet是将一系列Animator对象按照指定的顺序进行播放的类。这些动画可以是同时播放,顺序播放,延迟播放。
主要了解以下几种方式:
playTogether() 两种参数形式:Animator… items和Collection
items。将这些Animator同时进行播放。
playSequentially() 和playTogether类似也是两种参数形式,Animator是顺序播放。
play(Animator) 返回一个Builder,这个Builder提供with,before方法设置这些Animator的顺序。
其实,playTogether和playSequentially也是使用play(Animator)和Builder的方式实现的。
先设置四个测试Animator
animatorA = ObjectAnimator.ofFloat(mImageView, &translationX&, 0f, 300f, 0f);// 位移animatorB = ObjectAnimator.ofFloat(mImageView, &scaleX&, 1f, 1.5f, 1f);// 缩放animatorC = ObjectAnimator.ofFloat(mImageView, &rotationX&, 0f, 90f, 0f);// 旋转animatorD = ObjectAnimator.ofFloat(mImageView, &alpha&, 1f, 0f, 1f);// 透明度
同时播放playTogether
animatorSet.playTogether(animatorA, animatorB, animatorC, animatorD);animatorSet.start();
顺序播放playSequentially
animatorSet.playSequentially(animatorA, animatorB, animatorC, animatorD);animatorSet.start();
还试了一把Builder
// 尽量使用play.after,play.after..的形式如下// 顺序 正 A B C D// animatorSet.play(animatorA).before(animatorB);// animatorSet.play(animatorB).before(animatorC);// animatorSet.play(animatorC).before(animatorD);// 顺序 反 D C B A// animatorSet.play(animatorA).after(animatorB);// animatorSet.play(animatorB).after(animatorC);// animatorSet.play(animatorC).after(animatorD);// 同时 使用with的时候连着设置都是同时播放// animatorSet.play(animatorA).with(animatorB).with(animatorC).with(animatorD);// 不要这样,因为这样BCD其实是没有直接关系的//(没有理解为什么这样设计,提供了方法,但是使用的效果和预期的不一样)// animatorSet.play(animatorA).before(animatorB).before(animatorC); // 这个时候吃掉B了,执行顺序是A-&C// animatorSet.play(animatorA).before(animatorB).before(animatorC).before(animatorD); // 还是吃掉B了,执行顺序是A-&C&D// A 依赖 B , B 依赖 C , C 依赖 A 报错了:cry:,当然文档说了,别这么干// animatorSet.play(animatorA).after(animatorB);// animatorSet.play(animatorB).after(animatorC);// animatorSet.play(animatorC).after(animatorA);// 好吧,也别这么搞// animatorSet.playTogether(animatorA, animatorB, animatorC);// animatorSet.playSequentially(animatorD, animatorSet);//B--------//
A---------//
C---------//
D-------- animatorD.setStartDelay(2000); animatorSet.play(animatorB).before(animatorA); animatorSet.play(animatorA).with(animatorC); animatorSet.play(animatorD).after(animatorB);
animatorSet.start();
playTogether和playSequentially很简单,将animator传入就可以了,当然也支持Collection作为参数。
Builder比较绕一点,但是可以灵活完成各种要求,注意一下官方建议的调用形式。
使用代码设置AnimatorSet的时候,子Animator的Duration和TimeInterpolator是会被AnimatorSet覆盖的,并且这个Duration不是Set的总时长,是每个Animator的时长(和XML不一样)。
PivotX,PivotY的设置没有提供方法,可以自己手动设置。
mImageView.setPivotX(mImageView.getWidth() / 2);mImageView.setPivotY(mImageView.getHeight() / 2);
相对应的XML实现就比较麻烦了
&?xml version=&1.0& encoding=&utf-8&?&&set xmlns:android=&/apk/res/android&
android:ordering=&sequentially&&
&!-- 官网显示支持propertyValuesHolder和keyframe,但是我测试还是不行。所以只能用这个笨方法了--&
&!-- ps:测试机 4.4.4和5.0 --&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&translationX&
android:valueFrom=&0&
android:valueTo=&300&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&translationX&
android:valueFrom=&300&
android:valueTo=&0&
android:valueType=&floatType&/&
&objectAnimator
android:startOffset=&2000&
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&scaleX&
android:valueFrom=&1&
android:valueTo=&1.5&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&scaleX&
android:valueFrom=&1.5&
android:valueTo=&1&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&rotationX&
android:valueFrom=&0&
android:valueTo=&90&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&rotationX&
android:valueFrom=&90&
android:valueTo=&0&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&alpha&
android:valueFrom=&1&
android:valueTo=&0&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&alpha&
android:valueFrom=&0&
android:valueTo=&1&
android:valueType=&floatType&/&&/set&
&?xml version=&1.0& encoding=&utf-8&?&&set xmlns:android=&/apk/res/android&
android:ordering=&sequentially&&
&set android:ordering=&together&&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&translationX&
android:valueFrom=&0&
android:valueTo=&300&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&scaleX&
android:valueFrom=&1&
android:valueTo=&1.5&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&rotationX&
android:valueFrom=&0&
android:valueTo=&90&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&alpha&
android:valueFrom=&1&
android:valueTo=&0&
android:valueType=&floatType&/&
&set android:ordering=&together&&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&translationX&
android:valueFrom=&300&
android:valueTo=&0&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&scaleX&
android:valueFrom=&1.5&
android:valueTo=&1&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&rotationX&
android:valueFrom=&90&
android:valueTo=&0&
android:valueType=&floatType&/&
&objectAnimator
android:duration=&2000&
android:interpolator=&@android:interpolator/linear&
android:propertyName=&alpha&
android:valueFrom=&0&
android:valueTo=&1&
android:valueType=&floatType&/&
&/set&&/set&
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致问题:Android:ordering 的属性中除了sequentially还有什么属性吗?都怎么用?
描述:&set xmlns:android="/apk/res/android"
&&& android:ordering="sequentially"&
以上介绍了“Android:ordering 的属性中除了sequentially还有什么属性吗?都怎么用?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/1251167.html
上一篇: 下一篇:&&国之画&&&& &&
版权所有 京ICP备号-2
迷上了代码!Android学习之 属性动画
Android学习之 属性动画&Property Animation&
& & property 动画系统是相当健壮的框架,它几乎可以动画显示任何对象。 你可以定义一个动画来定时改变任何对象的属性值,不论该对象是否在屏幕上显示。 property 动画将以一定的时间间隔修改属性值(对象中的字段值)。 要实现动画显示,你须指定对象的相应属性(比如对象的屏幕位置),以及动画时长、动画时间间隔。
property 动画系统能让你设定以下动画要素: 1.持续时间:指定动画的持续显示时间。默认的时长是300毫秒。 2.插值因子:指定属性值的变化方式,表示为关于动画已显示时间的函数。 3.重复次数和方式:指定动画是否循环播放,以及重复的次数。还可以指定动画是否反向播放。可以设为先正向播放4.再反向回放,如此往复直至达到设定的重复次数。 5.动画集合:你可以把动画分为多个逻辑组,以便实现同时播放、顺序播放或间隔一段时间再播放。 6.帧刷新间隔:指定动画帧的刷新频率。默认是每 10 ms刷新一次,但应用程序实际可执行的刷新频率取决于系统整体的繁忙程度,以及系统对定时器的支持程度。
一、Property 动画的工作方式 & & 首先,我们通过一个简单例子来回顾一下动画的工作原理。图 1 表明了某对象的 x 属性变化情况,即在屏幕上水平的位置。 动画的持续时间设为 40 ms,移动的距离是 40 个像素点。每隔 10 ms,这是默认的帧刷新率,此对象横向移动 10 个像素点。 在 40 ms 到期后,动画停止,此对象位置横移 40 个像素点。以下是采用线性插值的示例,也即此对象以固定的速度移动。 & & & & & & & & & & & & & & & & & & & & & & 图 1. 线性动画的示例 & & 你还可以把动画设置为非线性插值方式。图 2 表示,某对象开始时加速移动,结束时减速移动。 此对象仍然是在 40 ms 内移动 40 个像素点,但是速度是非线性变化的。在开始时,此动画加速移动至中间位置,然后再减速移动至终点。 如图 2 所示,开始和结束阶段移动的距离比中间位置要少一些。 & & & & & & & & & & & & & & & & & & & & & & 图 2. 非线性动画示例 让我们来仔细查看一下 property 动画系统的关键部件在上述动画中的计算过程。图 3 展示了主要类的相互工作方式。 & & & & & & & & & & & & & & & & & & & & & & & 图 3. 动画的计算过程 1、ValueAnimator 对象记录了动画自身的一些值,比如已经显示了多长时间、动画对应属性的当前值。 2、ValueAnimator 中封装了一个定义动画变化方式的 TimeInterpolator ,以及定义了属性计算方式的 TypeEvaluator 。比如,图 2 中的 TimeInterpolator 应该使用 AccelerateDecelerateInterpolator , TypeEvaluator 应该使用 IntEvaluator。要启动动画,请创建一个 ValueAnimator 并指定要动画显示的属性的初始值和结束值。调用 start() 启动动画。在整个动画过程中, ValueAnimator 根据动画总时间和已进行的时间和计算出一个时间比例因子(elapsed fraction),大小介于0和1之间。 时间比例因子代表动画已完成时间的百分比,0 表示 0%,1 表示 100%。例如,在图 1 中,t = 10 ms 时的时间比例因子应该是 0.25,因为总时间 t = 40 ms。 3、ValueAnimator 算完时间比例因子后,将调用已设置好的 TimeInterpolator 计算出一个插值因子(interpolated fraction)。插值因子是一个由时间比例因子换算出来的图像显示状态因子。 比如,在图 2 中,t = 10 ms 时,因为动画的加速度较小,插值因子约是 0.15,它小于时间比例因子 0.25。 在图 1 中,插值因子一直保持不变,并与时间比例因子一致。算完插值因子, ValueAnimator 就会调用合适的 TypeEvaluator ,根据插值因子、初始值、结束值计算出需要动画显示的属性值。 比如,在图 2 中,t = 10 ms 时的插值因子是 0.15,所以此时的属性值应该是 0.15 X (40 - 0),也即为 6。
API 概述 你可以在 android.animation 中找到大部分 property 动画系统的 API。 由于 view 动画系统已经在 android.view.animation 中定义了很多 interpolator ,你可以在 property 动画系统中直接使用它们。 下表对 property 动画系统中的主要内容进行了说明。 Animator 类只提供了用于创建动画的基础构造方法。它只提供了最基本的功能,你必须扩展这些功能才能完成对动画的支持,因此通常你不应该直接使用该类。 以下子类就对 Animator 进行了扩展: 表 1. Animator
evaluator 用于告知 property 动画系统给定属性值的计算方式。根据 Animator 类给出的计时数据、动画初始值和结束值,它将计算出需动画显示的属性值。property 动画系统提供了以下 evaluator: 表 2. Evaluator
时间 interpolator 定义了动画显示的计算方式,它是一个关于时间的函数。 比如,你可以指定线性播放动画,也即全程匀速播放。或者,你也可以指定为非线性播放,比如一开始加速,而临近结束时减速。 表 3 列出了 android.view.animation 中包含的 Interpolator。 如果已有的 interpolator 无法满足需求,你可以实现 TimeInterpolator 接口并创建你自己的 interpolator 。 关于编写自定义 interpolator 的方法。 表 3. Interpolator
二、用ValueAnimator实现动画 通过指定一组int、float、颜色值, ValueAnimator 类能让你在动画过程中修改某些类型的值。通过调用其工厂方法(factory method): ofInt()、 ofFloat()、 ofObject(), 你可以获得一个 ValueAnimator 实例。比如:
ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();
在这段代码中, ValueAnimator 先设置动画值为0-1之间、持续 1000 ms、并执行start()方法。 你也可以按照以下格式指定自定义类型的动画值:
ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
animation.setDuration(1000);
animation.start();
在这段代码中, ValueAnimator 先计算动画值为startPropertyValue 至 endPropertyValue之间,应用 MyTypeEvaluator,持续时间 1000 ms,并执行 start()。
其实这段代码对某对象是无法实现动画效果的,因为 ValueAnimator 还没有直接控制对象或其属性值。你最有可能要做的事就是用计算出来的属性值修改动画对象。 通过在 ValueAnimator 中定义侦听器,你就可以实现这一点。侦听器可以实现动画过程中的事件处理,比如帧的刷新。 在侦听器的实现代码中,你可以调用 getAnimatedValue() 获取为本次画面刷新计算出来的属性值。
三、用ObjectAnimator实现动画 ObjectAnimator 是 ValueAnimator的子类,它是由计时引擎和计算目标对象的属性值 ValueAnimator 组合而成的。因为属性值将会自动更新,你不再需要实现 ValueAnimator.AnimatorUpdateListener了,因此实现任意对象的动画显示就更加容易了。 ObjectAnimator 的示例与 ValueAnimator 类似,只是你还需要在动画区间值之前额外指定对象和属性名称(字符串格式):
ObjectAnimator anim = ObjectAnimator.ofFloat(foo, &alpha&, 0f, 1f);
anim.setDuration(1000);
anim.start();
为了保证 ObjectAnimator 能够正确地更新属性值,你必须做到以下几点: 1、动画显示的属性必须带有一个 setter 方法(以骆驼拼写法命名),格式类似 set&propertyName&()。因为ObjectAnimator会在动画期间自动更新属性值,它必须能够用此 setter 方法访问到该属性。例如:假设属性名称为foo,则需要有一个setFoo()方法。如果此 setter 方法不存在,你有以下三种选择: & &1&如果你有权限的话,直接在类中增加此 setter 方法。 & &2&用你有权修改的封装类来增加此 setter 方法,并让该封装类来接收属性值并传给初始的对象。 & &3&换用 ValueAnimator。 2、如果在调用ObjectAnimator的某个工厂方法时,你只为 values... 参数指定了一个值,那此值将被认定为动画属性的结束值。这样的话,动画显示的属性必须带有一个 getter 方法,用于获取动画的起始值。 此 getter 方法必须以get&propertyName&()的格式命名。例如:假设属性名为foo,则需要有一个getFoo()方法。 3、动画属性的 getter 方法(如果必要的话)和 setter 方法所操作数据的类型必须与ObjectAnimator中设定的起始和结束值相同。比如,如果你建立了以下ObjectAnimator ,那么就必须有targetObject.setPropName(float) 和 targetObject.getPropName(float):
ObjectAnimator.ofFloat(targetObject, &propName&, 1f)
4、根据不同的动画显示对象和属性,也许你需要调用 View 的invalidate()方法,以便用新的属性值强制重绘屏幕。你应该在onAnimationUpdate() 回调方法中进行刷新操作。比如,要动画显示 Drawable 对象的颜色属性,就只有通过重绘才能在屏幕上显示出变化。View 中所有的属性 setter 方法,比如setAlpha()和setTranslationX(),都会适时地禁用 View,因此你不需要在用新属性值调用这些方法时禁用 View。
四、用AnimatorSet编排多个动画 很多时候,你需要在一个动画的开始和结束时播放另一个动画。Android 系统可以让你把多个动画组合为一个 AnimatorSet ,这样你就可以设定同时播放、顺序播放或延迟一段时间后再播放。 你还可以嵌套多个 AnimatorSet 对象。 如下面范例,将用以下规则播放 Animator 对象: 1、播放 bounceAnim。 2、同时播放 squashAnim1、squashAnim2、stretchAnim1 和 stretchAnim2。 3、播放 bounceBackAnim。 4、播放 fadeAnim。
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, &alpha&, 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();
五、动画侦听器 在播放过程中,你可以用下列侦听器来监听那些重要的动画事件。 Animator.AnimatorListener & onAnimationStart() —— 动画开始时调用。 & onAnimationEnd() —— 动画结束时调用。 & onAnimationRepeat() —— 动画循环播放时调用。 & onAnimationCancel() —— 动画被取消时调用。不管终止的方式如何,被取消的动画仍然会调用onAnimationEnd()。 ValueAnimator.AnimatorUpdateListener & onAnimationUpdate() —— 动画每播放一帧时调用。在动画过程中,可侦听此事件来获取并使用ValueAnimator计算出来的属性值。利用传入事件的ValueAnimator对象,调用其getAnimatedValue()方法即可获取当前的属性值。如果你使用ValueAnimator,则必需实现此侦听器。 根据不同的动画对象及其属性,你也许需要调用 View 的invalidate()方法,强制用新的属性值重绘屏幕区域。比如,要动画显示 Drawable 对象的颜色属性,只有重绘才能在屏幕上显示出变化。View 中所有的属性 setter 方法,比如setAlpha()和setTranslationX(),都会适时地禁用 View,因此你不需要在用新属性值调用这些方法时禁用 View。 如果你不愿意实现 Animator.AnimatorListener 中所有的方法,那你可以不用此侦听器,而是扩展 AnimatorListenerAdapter 类。 AnimatorListenerAdapter 类为所有方法都实现了空方法体,你自行选择并覆盖即可。 例如 下面范例 创建了一个只带有 onAnimationEnd() 回调方法的 AnimatorListenerAdapter
ValueAnimatorAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, &alpha&, 1f, 0f);
fadeAnim.setDuration(250);
fadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
balls.remove(((ObjectAnimator)animation).getTarget());
六、ViewGroup中Layout的动画 与 View 动画一样简单, property 动画系统对 ViewGroup 对象的动画显示提供了支持。 你可以用 LayoutTransition 类来动画显示 ViewGroup 中的 Layout。 通过把 View 加入或移出 ViewGroup ,或者以 VISIBLE、 INVISIBLE、 GONE 调用 View 的 setVisibility() 方法,可以实现某个 View 的显现和消失效果。 当你添加或删除 View 时,ViewGroup 中的其它 View 也可以用动画的方式移到新的位置显示。 你可以调用 LayoutTransition 对象的 setAnimator() 方法来定义下列动画方式,调用参数是 Animator 对象和以下 LayoutTransition 常量: APPEARING —— 元素在容器中显现时需要动画显示。 CHANGE_APPEARING —— 由于容器中要显现一个新的元素,其它元素的变化需要动画显示。 DISAPPEARING —— 元素在容器中消失时需要动画显示。 CHANGE_DISAPPEARING —— 由于容器中某个元素要消失,其它元素的变化需要动画显示。 你可以为这四种事件定义自己的动画方式,以便定制 layout 变化时的外观,也可以只是通知动画系统采用默认的动画方式。 范例代码: 1、需要把 ViewGroup 的 android:animateLayoutchanges 属性设为 true。 比如:
&LinearLayout
android:orientation=&vertical&
android:layout_width=&wrap_content&
android:layout_height=&match_parent&
android:id=&@+id/verticalContainer&
android:animateLayoutChanges=&true& /&
此属性设为 true 将会自动把 View 加入和移出 ViewGroup 的过程以动画方式显示,ViewGroup 中其它的 View 同时也会以动画方式进行调整。
2、为ViewGroup设置Layout的改变动画
LayoutTransition mTransition = new LayoutTransition();
mTransition.setAnimator(
LayoutTransition.APPEARING,
ObjectAnimator.ofFloat(this, &scaleX&, 0, 1));
mGridLayout.setLayoutTransition(mTransition);
PS:更详细的案例可以参考 鸿洋大神的一篇博客:
http://blog.csdn.net/lmj/article/details/
七、使用TypeEvaluator 如果 Android 系统无法识别需要动画显示的属性值类型,你可以创建自己的 evaluator,实现 TypeEvaluator 即可。Android 系统可识别的类型包括int、float和颜色,分别由 IntEvaluator、 FloatEvaluator、 ArgbEvaluator 提供支持。 TypeEvaluator接口中只要实现一个方法即可,就是 evaluate()。此方法返回一个当前动画时刻的属性值。FloatEvaluator类展示了这一过程:
public class FloatEvaluator implements TypeEvaluator {
public Object evaluate(float fraction, Object startValue, Object endValue) {
float startFloat = ((Number) startValue).floatValue();
return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);
注意: 当ValueAnimator (或 ObjectAnimator )运行时,它会先算出当前已显示的动画进程比例(介于 0 和 1 之间),然后再根据所用的 interpolator 计算出插值因子。 TypeEvaluator 接收到的 fraction 参数本身就是此插值因子,因此你在计算动画属性值时就不必用到 interpolator 了。
八、使用Interpolator 插值器(interpolator)定义了动画过程中属性值的变化规则,它是一个关于时间的函数。 比如,你可以把动画过程设定为线性变化,这意味着它全程都是匀速变化。 或者,你可以设定动画为非线性变化,比如在开始或结束时加速或减速。 动画系统中的 interpolator 会从 Animator 中接收到一个时间比例因子,此因子代表了动画已显示的时间。 interpolator 会根据动画的类型修改此因子。Android 系统在 android.view.animation 包中提供了一组通用的 interpolator。如果这些都不满足需要,你可以实现 TimeInterpolator 接口来创建自己的 interpolator。 作为示例,缺省的 AccelerateDecelerateInterpolator 和 LinearInterpolator interpolator 将会以下列方式计算插值因子: AccelerateDecelerateInterpolator
public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}LinearInterpolator
public float getInterpolation(float input) {
九、设定关键帧 Keyframe 对象中包含了一个时间/属性值的键值对,用于定义某个时刻的动画状态。 每个关键帧还可以拥有自己的 interpolator,用于控制前一关键帧至本关键帧之间的动画行为。 要实例化一个 Keyframe 对象,你必须使用它的工厂方法 ofInt()、 ofFloat()、 ofObject() 之一,或者获得相应类型的 Keyframe 。然后,调用工厂方法 ofKeyframe() 获得一个 PropertyValuesHolder 对象。一旦有了这个对象,你就可以把它和需动画显示的对象作为参数得到一个 animator。以下代码段展示了这一过程:
Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(.5f, 360f);
Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(&rotation&, kf0, kf1, kf2);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(target, pvhRotation)
rotationAnim.setDuration(5000ms);
rotationAnim.start();
十、动画显示View property 动画系统可以让 View 对象进行一系列的动画显示,相比 view 动画系统具有更多优势。
view 动画系统通过改变 View 对象的绘制方式来实现动画效果。 因为 View 本身没有给出属性以供控制,所以这是由 View 所在容器来完成处理的。 虽然这样能实现 View 的动画效果,但 View 对象本身并没有变化。 因此会出现这种情况:虽然屏幕上的显示位置已经移动过了,但对象实际仍然停留在原来的位置。 为了消除这一弊病,在 Android 3.0 中给 View 增加了一些新的属性以及相应的 getter、setter 方法。 1& property 动画系统可以通过修改 View 对象实际的属性值来实现屏幕上的动画效果。此外,当属性值发生变化时,Views 也会自动调用 & & invalidate()方法来刷新屏幕。 View 类中新增的便于实现 property 动画的属性包括: 2& translationX 和 translationY:这两个属性控制着 View 的屏幕位置坐标变化量,以 layout 容器的左上角为坐标原点。 3& rotation、rotationX 和 rotationY:这三个属性控制着 2D 旋转角度(rotation属性)和围绕某枢轴点的 3D 旋转角度。 4& scaleX、scaleY:这两个属性控制着 View 围绕某枢轴点的 2D 缩放比例。 5& pivotX 和 pivotY: 这两个属性控制着枢轴点的位置,前述的旋转和缩放都是以此点为中心展开的。缺省的枢轴点是 View 对象的中心点。 & &注意: 1、通过调用mView.setPivotX() 和 mView.setPivotY()来设置某View的旋转/缩放枢轴点坐标。 & & & & & & 2、此时的原点坐标(0,0)为该旋转/缩放View的左上角,而不再以手机屏幕左上角为x、y轴坐标原点。 6& x 和 y:这是指 View 在容器内的最终位置,等于 View 左上角相对于容器的坐标加上 translationX 和 translationY 后的值。 7& alpha:表示 View 的 alpha 透明度。缺省值为 1 (不透明),为 0 则表示完全透明(看不见)。 要动画显示 View 对象的某个属性,比如颜色或旋转值,你所有要做的事情就是创建一个 property animator,并设定对应的 View 属性。比如:
ObjectAnimator.ofFloat(myView, &rotation&, 0f, 360f);
十一、用ViewPropertyAnimator实现动画 利用一个基础的 Animator 对象, ViewPropertyAnimator 为同时动画显示 View 的多个属性提供了一种捷径。这种方式与一个 ObjectAnimator 很类似,因为也会修改 View 的实际属性值,但在需要一次动画显示多个属性时效率会更高一些。 此外,使用 ViewPropertyAnimator 的代码会简洁很多,可读性更好。以下代码段展示了分别使用多个 ObjectAnimator 对象、单个 ObjectAnimator 对象、 ViewPropertyAnimator 对象实现 view 的 x 和 y 属性的同时变化。 多个 ObjectAnimator 对象
ObjectAnimator animX = ObjectAnimator.ofFloat(myView, &x&, 50f);
ObjectAnimator animY = ObjectAnimator.ofFloat(myView, &y&, 100f);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(animX, animY);
animSetXY.start();
单个 ObjectAnimator
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(&x&, 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(&y&, 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
ViewPropertyAnimator
ViewPropertyAnimator
myView.animate().x(50f).y(100f);
十二、在XML中声明动画 property 动画系统允许你用 XML 声明 property 动画,而不需要编写代码来实现。 通过 XML 定义的方式,你可以方便地在多个 activity 中复用动画资源,并且更容易编排动画顺序。 为了把采用新增 property 动画 API与采用以前 view animation 框架的动画文件区分开来,自 Android 3.1 开始,你应该把 property 动画 XML 文件保存到res/animator/目录下(而不是res/anim/目录)。 目录名animator是可以修改的,但如果你要用 Eclipse ADT(ADT 11.0.0+) 插件作为 layout 编辑工具,那就不能动了。 因为 ADT 只会搜索res/animator/目录下的动画资源。 以下列出了可用 XML 标记声明的 property 动画类: ValueAnimator - &animator& ObjectAnimator - &objectAnimator&
AnimatorSet - &set&
以下例子顺序播放两组动画,第一组动画内嵌入了两个对象的动画:
&set android:ordering=&sequentially&&
&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&/&
&objectAnimator
android:propertyName=&alpha&
android:duration=&500&
android:valueTo=&1f&/&
为了播放这个动画,你必须用代码把 XML 资源置入 AnimatorSet 中,然后设置动画的所有目标对象,再开始动画。用 setTarget() 可以很方便地为 AnimatorSet 下所有子元素设置一个目标对象。以下代码展示了这种设置方法:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myObject);
set.start();
备注:该篇内容转载于:.cn/s/blog_48da1u.html&[呆呆大虾:API翻译系列]
英文原文:/guide/topics/graphics/prop-animation.html
Android属性动画 Property Animation
3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,它更改的是对象的实际属性,在View Animation(Tween Animation)中,其改变的是View的绘制效果,真正的View的
【Android】Animation学习笔记
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看A
转:Android Animation学习笔记
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下
转 Android Animation学习笔记
/feisky/archive//1644482.html
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是
Android画图学习总结(四)——Animation(下)
在Android画 图学习总结(四)——Animation(上)中,我们详细介绍了Tween Aniamation,这里我们将介绍另外一种动画Frame Animation。在前面已经说过,Frame Animation是顺序播放事先做好的图像,跟电影类似。不同于animation package, Android SDK
Android动画开发—Animation动画效果详解
Android的animation由四种类型组成 XML中alpha渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转动画效果JavaCode中AlphaAnimation渐变透明度动画效果ScaleAnimation渐变尺寸伸缩动画效果Translat
Android Animation(二)
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画; 2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。 动画类型 下面先来看看And
android之animation(一)
animations:动画。
新知识点介绍:animations是一系列的动画效果,这些效果可以运用在绝大数控件上面。
animations总的说来可以分为两类:
1、Tweened Animations:包括旋转、移动、伸展、淡入淡出等效果。
2、Frame-by-Frame Animations:这个可以创建一个Drawable序列,可以一
Android学习11-----多媒体技术(2) Animation
一、渐变动画, Tweened Animation
Tweened Animation 表示的是一些基本的动画元素操作,所有的 Animation 操作的方法都在 android.view.animation.Animati
android3.0及以上动画分析
ValueAnimator简介 ValueAnimator属于property animation
Propertity Animation类似于 tween动画,区别在于ValueAnimator修改的是真实属性。 在Android 3.0中给View增加了一些参数并对这些参数增加了相应的getter/setter函数(ObjectAni
Android path animation 效果
两种Path animation源码,第一种较为直观,第二种做了些代码规范方面的工作
Android仿Path按钮动画效果 PathButton 图片效果地址:http://www./lib/view/open4.html 项目下载地址:/dod
Android Animation 动画的使用方法和介绍
Drawable 最强大的功能是:显示Animation。AndroidSDK介绍了2种Animation:
Tween Animation(渐变动画):通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果 Frame Animation(帧动画) :顺序播放事先做好的图像,
Android Animation总结
[Android 界面] Android中的动画研究(一) 1./forum.php?mod=viewthread&tid=68369&page=1 eoe现在挺烦...好多浮动窗口.....
2.Android 拖动换图特效 /blog
Android中的Animation动画效果
Android中的Animation动画效果可以通过两种方式实现:
在XML中实现动画效果
alpha 渐变透明度动画效果
android:fromAlpha=&0.1&//&nbsp
Android中使用animation的方法
Android中使用animation的方法
在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义, 下面的小例子是利用RotateAnimation简单展示一下两种方法的用法,对于其他动画,如ScaleAnimation,AlphaAnimation,原理是一样的。
方法一:在xml中定义动画:
Android中使用animation的方法
Android中使用animation的方法
在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义, 下面的小例子是利用RotateAnimation简单展示一下两种方法的用法,对于其他动画,如ScaleAnimation,AlphaAnimation,原理是一样的。
方法一:在xml中定义动画: &?x
Android中Animation动画的介绍及用法
Android SDK介绍了2种Animation: Tween Animation(渐变动画):通过对特定的对象做图像变换如平移、缩放、旋转、淡出/淡入等产生动画效果 Frame Animation(帧动画):创建一个Drawable序列,这些Drawable可以按照指定的时间间隔一个一个的显示,也就是顺序播放事先做好的图像。 1、Twee
Android动画之AnimationListener(六)
通过AnimationListener可以监听Animation的运行过程 AnimationSet as=new AnimationSet(true); RotateAnimation al=new RotateAnimation(0,-720,Animation.RELATIVE_TO_PARENT,0.5f,Animation.
Android应用程序添加自定义的property属性 这是因为Android只有root, system, media用户才有权限写property, 而普通APP的用户ID是APP_XXX, 所以需要提升权限. 前提一定要基于Android源码来编译, 不能基于SDK编译
Android.mk里面要添加
LOCAL_CERTIFICATE := platform
android animation的应用实例
[java]view plaincopy
&?xmlversion=&1.0&encoding=&UTF-8&?& &setxmlns:android=&http://
Android使用Animation技巧讲解
Android 使用 Animation的具体操作方法我们将会在这篇文章中做一个详细的介绍。大家可以通过这里举出的代码进行解读,并从中了解到相关操作技巧,方便我们将来开发应用,并且加深对这一操作系统的理解程度。
在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义,下面的小例子是利用RotateAnimation简单
Android中两种使用Animation的方法
在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义,下面的小例子是利用RotateAnimation简单展示一下两种方法的用法,对于其他动画,如ScaleAnimation,AlphaAnimation,原理是一样的。
方法一:在xml中定义动画: &?xml version=&1.
Android中两种使用Animation的方法
在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义,下面的小例子是利用RotateAnimation简单展示一下两种方法的用法,对于其他动画,如ScaleAnimation,AlphaAnimation,原理是一样的。
方法一:在xml中定义动画:
[转]android animation的应用实例
此文件名为myanimation.xml 位于 res/anim文件夹下,具体释义已在文件中解释:
&?xml version=&1.0& encoding=&UTF-8&?& &set xmlns:android=&http://schemas.an
android动画总结
逐帧动画(frame-by-frame animation),这种动画和GIF一样,一帧一帧的显示来组成动画效果; 逐帧动画是一帧帧图片组成的
布局动画(layout animation),这种动画用来设置layout内的所有UI控件; 通过改变UI的属性(大小、位置、透明度等)来实现动画效果
控件动画(view animation),这种是应用到具体某个view上的
Android播放动画后点击事件消失
问题:为imageview添加了动画,动画播放完之后imageview的点击事件(点击、长按)消失了。 处理办法:
animation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation anim
Android 动画之Tween动画详细讲解
Tween动画在Android中分为4类,它们分别是:AlphaAnimation(透明度动画)、TranslateAnimation(平移动画)、ScaleAnimation(缩放动画)、RotateAnimation(旋转动画)。都继承自android.view.Animation类,它们都是表示从一个状态A向状态B变化的一个过程,所以英文名字叫
android gallery和Animation组合使用, 看美女美图
今天主要探究Gallery和Animation的使用。 制作一个美女图片集锦。
1. 首先需要做一个列表, 用来显示类别:
public class CategoryActivity extends Activity implements OnItemClickListener{ private ListView
Android动画之图片动画(四)
现在使ImageView中的图片可以动起来 1.在drawable-mdpi文件夹下加入图片,并加入一个xml文件,文件如下 &?xml version=&1.0& encoding=&utf-8&?& &animation-list xmlns:android=&http://schemas
Android动画之Interpolator和AnimationSet(三)
AnimationSet可以加入Animation,加入之后设置AnimationSet对加入的所有Animation都有效。 AnimationSet anim=new AnimationSet(true); AlphaAnimation a=new AlphaAnimation(1,0); RotateAnimat
android系统启动流程启动画面学习之init和init.rc分析
这段时间,断断续续的忙了一阵,因为父亲的去世也不情愿的休息了20来天,一点也没有办法。回来后重新开始学习android的启动流程。对android系统级别的学习,阅读代码成为了唯一的办法,不像应用程序开发来得那么明了快捷。之前花了好多时间才对android的binder驱动做了一定的了解,最近几天从android的启动画面,分
Android动画之初步(一)
Android Tweened Animation一共有四种 Alpha: 淡入淡出效果 Scale: 缩放效果 Rotate: 旋转效果 Translate:移动效果 使用Tweened Animations的步骤 1.创建一个AnimationSet对象 2.根据需要创建需要的Animation对象 3.根据软件动画的需要,为Animation对象设置相应的数
[转]有关android动画的一些基础概念
动画效果编程基础--AnimationAndroid
在Android中,分别可以在xml中定义Animation,也可以在程序代码中定义 动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rot
Android动画详细探究
Android动画详细探究
Animation是一个用于View,Surfaces和其它对象实现动画效果的抽象类,其中常用的类是TranslateAnimation用于控制位置的改变 一下列出一些重要的属性和方法 Xml属性 android:duration:运行动画的时间 android:interpolator:定义用于平滑动画运动的
设置android默认属性
修改文件 build/target/product/core.mk 文件 PRODUCT_PROPERTY_OVERRIDES := \
ro.config.notification_sound=Beat_Box_Android.ogg \
ro.config.alarm_alert= Ala
Android 动画入门指南
本讲内容:Android 动画入门指南1、补间动画2、逐帧动画 Android中动画的实现分两种方式,一种方式是补间动画 Teen Animation,就是说你定义一个开始和结束,中间的部分由程序运算得到。另一种叫逐帧动画 Frame Animation,就是说一帧一帧的连起来播放就变成了动画。有点Flash基础的同学理解起来会很容易。接下来
android四种补间动画
android的动画分为两大类:补间动画,帧动画。 补间动画又分为四大类:移动补间动画,缩放补间动画,旋转补间动画,透明补间动画。
这四种补间动画都是Animation的子类。 移动补间动画:TranslateAnimation eg: Animation animation = new TranslateAnimation(0,50,0,50); 参数
Android之指南针学习
Android 动画之帧动画
帧动画是根据视觉停留原理而实现的动画效果,本例从AnimationDrawable角度来实现一个简单动画效果,主页面如图:
示例用含有数字1、2、3、4的图片代表不同的帧,然后通过AnimationDrawable来控制帧动画。下面说明一下实现过程:
android 页面切换动画效果
如下一个例子: Animation animation1 = AnimationUtils.loadAnimation(HomeActivity.this, R.anim.my_rotate_action); searchImageView.startAnimation(animation1); 在2.0之后有了overridePendingTransition
<div class="ds-thread" data-thread-key="99984" data-title="Android学习之 属性动画" data-url="http://www.soso.io/article/99984.html">

我要回帖

更多关于 webkit rtl ordering 的文章

 

随机推荐