Android动画机制
2016-11-23 21:15:42 0 举报
AI智能生成
Android动画机制是一种用于在应用程序中创建视觉效果的技术。它允许开发者通过改变视图的属性值来实现动画效果,例如位置、大小、颜色等。Android提供了多种动画类型,包括补间动画(Tween Animation)、属性动画(Property Animation)和视图动画(View Animation)。 补间动画是最简单的一种动画类型,它通过对开始和结束状态之间的插值来计算中间状态。属性动画则更加灵活,可以对任何属性进行动画处理。视图动画则是针对整个视图进行的动画处理。
作者其他创作
大纲/内容
Android3.0之前
帧动画
<div>别名:Frame Animation<br></div><div>Drawable Ainimation</div>
原理:人眼的视觉暂留效益
两种定义方式
xml文件
<div>1.res/drawable/放图片资源<br></div><div>2.res/anim/新建一个XML文件</div><div>3.定义一个<Animation-list标签 onShot=控制动画是否循环</div><div>true表示循环><item节点 放drawable资源的duration时间></div>
代码...
补间动画
定义
<div>开发者无须定义动画过程的每一帧,只需要定义</div><div>动画的开始和结束的两帧,然后又android系统进</div><div>行计算,在开始和结束关键帧之间插入渐变值(插值器)来实现平</div><div>滑过渡,从而完成一系列效果的动画。</div>
类型
AlphaAnimation
ScaleAnimation
TransationAnimation
RotateAnimation
创建方式
XML文件
<div>1.res/drawable/文件<br></div><div>2.添加set节点 加上interpolator属性</div><div>3.在节点中添加四种节点属性(时间,初始结束效果)</div>
代码
<div>1.创建四种XXAnimation对象<br></div><div>2.设置持续时间</div><div>3.设置动画后保存结束状态(setFillAfter)</div><div>4.对象setAnimation(anim)</div>
自定义补间动画...
Android3.0发布
属性动画propertyAnimation
属性动画和补间动画的区别
<div><div>补间动画还有一个最大的缺陷,就是它只是改变了</div><div>View的显示效果而已,并不会真正的改变View的属</div><div>性。具体来说,例如屏幕左上角有一个Button,使</div><div>用补间动画将其移动到右下角,此刻你去点击右下</div><div>角的Button,它是绝对不会响应点击事件的,因此</div><div>其作用区域依然还在左上角。只不过是补间动画将</div><div>其绘制在右下角而已。</div><div>属性动画不仅改变显示效果,还改变属性。</div></div>
常用的属性
duration
interpolator
repeatCount
repeatMode
帧刷新频率默认是10ms
ordering属性可以控制这组动画是否是顺序执行还是一起执行
AnimatorSet
ValueAnimator
可以实现倒计时、颜色渐变
设置StateBar样色渐变效果的Demo
<pre style="background-color:#21282d;color:#e0e2e4;font-family:'Lucida Sans Typewriter';font-size:13.8pt;"><span style="color:#e784a2;font-weight:bold;">int </span>curColor <span style="color:#e8e2b7;">= </span><span style="color:#e784a2;font-weight:bold;">this</span><span style="color:#e8e2b7;">.</span>getWindow<span style="color:#ffffff;">()</span><span style="color:#e8e2b7;">.</span>getStatusBarColor<span style="color:#ffffff;">()</span><span style="color:#e8e2b7;">;<br></span><span style="color:#7d8c93;">//</span><span style="color:#7d8c93;font-family:'宋体';">其实是</span><span style="color:#7d8c93;">ArgbEvaluator</span><span style="color:#7d8c93;font-family:'宋体';">对</span><span style="color:#7d8c93;">int</span><span style="color:#7d8c93;font-family:'宋体';">的颜色进行了计算,使从</span><span style="color:#7d8c93;">curColor</span><span style="color:#7d8c93;font-family:'宋体';">色值,变化到设置的色值<br></span><span style="color:#6ca3c9;font-weight:bold;">ValueAnimator </span>animator <span style="color:#e8e2b7;">= </span><span style="color:#6ca3c9;font-weight:bold;">ValueAnimator</span><span style="color:#e8e2b7;">.</span>ofObject<span style="color:#ffffff;">(</span><span style="color:#e784a2;font-weight:bold;">new </span>ArgbEvaluator<span style="color:#ffffff;">()</span><span style="color:#e8e2b7;">,</span>curColor<span style="color:#e8e2b7;">,</span><span style="color:#6ca3c9;font-weight:bold;">Color</span><span style="color:#e8e2b7;">.</span>argb<span style="color:#ffffff;">(</span><span style="color:#3cffff;">0</span><span style="color:#e8e2b7;">,</span><span style="color:#3cffff;">0</span><span style="color:#e8e2b7;">,</span><span style="color:#3cffff;">0</span><span style="color:#e8e2b7;">,</span><span style="color:#3cffff;">0</span><span style="color:#ffffff;">))</span><span style="color:#e8e2b7;">;<br></span>animator<span style="color:#e8e2b7;">.</span>addUpdateListener<span style="color:#ffffff;">(</span><span style="color:#e784a2;font-weight:bold;">new </span>ValueAnimator<span style="color:#e8e2b7;">.</span>AnimatorUpdateListener<span style="color:#ffffff;">() </span><span style="color:#e8e2b7;">{<br></span><span style="color:#e8e2b7;"> </span><span style="color:#a082bd;">@Override<br></span><span style="color:#a082bd;"> </span><span style="color:#e784a2;font-weight:bold;">public void </span><span style="color:#678cb1;">onAnimationUpdate</span><span style="color:#ffffff;">(</span><span style="color:#6ca3c9;font-weight:bold;">ValueAnimator </span>animation<span style="color:#ffffff;">) </span><span style="color:#e8e2b7;">{<br></span><span style="color:#e8e2b7;"> </span>getWindow<span style="color:#ffffff;">()</span><span style="color:#e8e2b7;">.</span>setStatusBarColor<span style="color:#ffffff;">((</span><span style="color:#6ca3c9;font-weight:bold;">Integer</span><span style="color:#ffffff;">) </span>animation<span style="color:#e8e2b7;">.</span>getAnimatedValue<span style="color:#ffffff;">())</span><span style="color:#e8e2b7;">;<br></span><span style="color:#e8e2b7;"> }<br></span><span style="color:#e8e2b7;">}</span><span style="color:#ffffff;">)</span><span style="color:#e8e2b7;">;<br></span>animator<span style="color:#e8e2b7;">.</span>setDuration<span style="color:#ffffff;">(</span><span style="color:#3cffff;">3000</span><span style="color:#ffffff;">)</span><span style="color:#e8e2b7;">.</span>setStartDelay<span style="color:#ffffff;">(</span><span style="color:#3cffff;">1000</span><span style="color:#ffffff;">)</span><span style="color:#e8e2b7;">;<br></span>animator<span style="color:#e8e2b7;">.</span>start<span style="color:#ffffff;">()</span><span style="color:#e8e2b7;">;</span></pre>
Android4.4中
AndroidSDK 出现transition框架
插值器Interpolator
<div>startAnimation马上开始动画</div><div>setAnimation默认是在第一次显示的时候</div><div>它不仅需要设置动画还要设置生效时间</div>
<div>Invaluator(求值程序类)<br></div><div>可以对Argb、int、float求值</div>
0 条评论
下一页