交互之“Animation”

 

又一个对时间的映射

 

 

( 如作用于UI时:形态(x,y,z),颜色等:Measure,Layout,(on)Draw();  )

 

属性动画:(反射)getPropertyInitialValue(),setProperty(ObjectAnimator时) //‘估值器’       

ValueAnimator(时刻捕捉器).ofObject(估值器:值变方式).setDuration().start()     //  (Interpolator(插值器,控制值变速率:属性动画(Animator.setInterpolator()),默认InterpolatorAccelerateDecelerateInterpolator).getInterpolation(float input:[0,1])){return fraction[0,1];//值变进度}    ---> (估值器类型:Object)TypeEvaluator.evaluate(float fraction,估值器 startValue,估值器 endValue)//值域

                    ValueAnimator.getAnimatedFraction()/ (Object:估值器类型)getAnimatedValue()

                   ValueAnimator.addListener(AnimatorListener{start; cancel; repeat; end; }) //低频捕捉

                   ValueAnimator.addUpdateListener()//高频 (s)=插值器(值变进度)的变化频率: 变化域内有效元素个数(变化次数/帧数)/duration=平均变化频率(线性插值器)

如V里@Override protected void onDraw(Canvas canvas) { 

if (currentPoint == null) { 
currentPoint = new Point(RADIUS, RADIUS); 
drawCircle(canvas); 
startAnimation(); 
} else { 
drawCircle(canvas); 


void drawCircle(Canvas canvas) { 
float x = currentPoint.getX(); 
float y = currentPoint.getY(); 
canvas.drawCircle(x, y, RADIUS, mPaint); 
}

void startAnimation(){

ValueAnimator anim = ValueAnimator.ofObject(new TypeEvaluator(){ 
@Override public Object evaluate(float fraction, Object startValue, Object endValue) { 
         Point startPoint = (Point) startValue; 
         Point endPoint = (Point) endValue; 
         float x = startPoint.getX() + fraction * (endPoint.getX() - startPoint.getX()); 
         float y = startPoint.getY() + fraction * (endPoint.getY() - startPoint.getY()); 
         Point point = new Point(x, y); 
         return point; 
} } , new Point(getWidth() / 2, RADIUS), new Point(getWidth() / 2, getHeight() - RADIUS));
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
currentPoint = (Point) animation.getAnimatedValue();
invalidate();//
}
});
anim.setInterpolator(new BounceInterpolator());//AccelerateInterpolator(2f),
anim.setDuration(3000);
anim.start();}

 

AnimatorSet().(play    before     with     after )

 

ViewPropertyAnimator: V.animate().alpha(0f)...;//V专用

 

KeyFrame

KeyFrameSet

PropertyValuesHolder

 

 

 

 

Tween动画(父容器不断的绘制 view:父view每一帧都会重建,每次都是触发父view invalidate(区域),重建Canvas;view第一帧重建,动画启动时,View#invalidate设置了PFLAG_INVALIDATED标志,后续动画不会再重建;其它同级view不会重建Canvas,onDraw不会触发):矩阵变换     (Alpha)Animation(initialize();  applyTransformation(float interpolatedTime, Trasformation t(){t.getMatrix();Camera....}; ).setAnimationListener(start;repeat; end;)//低频        V.clearAnimation()

LayoutAnimation to VP: 依次作用于其子V。interval/delayorder

A.overridePendingTransition();//在start或finish后

FragmentTransaction.setCustomAnimations();

自定义ViewPager页面切换动画setPageTransformer(boolean, PageTransformer) 

android:animateLayoutChanges="true",LinearLayout中添加View的动画,支持通过setLayoutTransition()自定义

AnimationDrawable.start;

 

 

 

硬件加速

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值