交互之“Animation”

来源:互联网 发布:jdk 8u131 linux x64 编辑:程序博客网 时间:2024/06/01 23:15


又一个对时间的映射



(如作用于UI时:大小:宽高;形态:(on)Draw();)


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

ValueAnimator(时刻捕捉器).ofObject(估值器:值变方式).setDuration().start()     //  (Interpolator(插值器,控制值变速率属性动画(Animator.setInterpolator())默认InterpolatorAccelerateDecelerateInterpolator).getInterpolation(float input:[0,1])){return fraction;//值变进度}    ---> (估值器类型: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); 
float x = currentPoint.getX(); 
float y = currentPoint.getY(); 
canvas.drawCircle(x, y, RADIUS, mPaint); 
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专用



Tween动画:作用于内容(eg. Drawable):矩阵变换     (Alpha)Animation(initialize();  applyTransformation(float interpolatedTime, Trasformation t(){t.getMatrix();Camera....}; ).setAnimationListenerstart;repeat; end;)//低频        V.clearAnimation()

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

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

FragmentTransaction.setCustomAnimations();

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

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

AnimationDrawable.start;



硬件加速

 

1 0