Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開源-NineOldAndroids

Android開源-NineOldAndroids

編輯:關於Android編程

 

簡介:NineOldAndroids是一款支持在低版本開發的Android動畫的框架 包括了一系列如ViewAnimator,ObjectAnimator,

ViewPropertyAnimator等API,解決了Tween動畫中移動過程只顯示移動效果,而不是真正組件的問題.

 

1)創建ObjectAnimator
ObjectAnimator anim1=ObjectAnimator.ofFloat(balls.get(0),y,0f,getHeight()-balls.get(0).getHeight()).setDuration(500);
調用開始 animation.start();
克隆 ObjectAnimator anim2=anim1.clone();


2)定義動畫組

ObjectAnimator animDown=ObjectAnimator.ofFloat(balls.get(2), y,0f,getHeight()-balls.get(2).getHeight()).setDuration(500);
ObjectAnimator animUp=ObjectAnimator.ofFloat(balls.get(2), y,getHeight()-balls.get(2).getHeight(),0f).setDuration(500);
AnimatorSet s1=new AnimatorSet();
使動畫具有連貫性 s1.playSequentially(animDown,animUp);
使動畫時間開始一致 animation.playTogether(anim1,anim2,s1);

 

3)值動畫(AnimatorInflater布局加載器)

ValueAnimator alphaAnimator=(ValueAnimator) AnimatorInflater.loadAnimator(AnimationLoading.this,R.anim.animator);
alphaAnimator.setTarget(balls.get(1));
		alphaAnimator.addUpdateListener(new AnimatorUpdateListener() {
			@Override
			public void onAnimationUpdate(ValueAnimator animation) {
				balls.get(1).setAlpha((Float) animation.getAnimatedValue());
			}
		});

 

 

4)動畫集
AnimatorSet s1=(AnimatorSet) AnimatorInflater.loadAnimator(AnimationLoading.this,R.anim.animator_set);
s1.setTarget(balls.get(2));
對象動畫(移動/顏色改變)
ObjectAnimator s2=(ObjectAnimator) AnimatorInflater.loadAnimator(AnimationLoading.this, R.anim.color_animator);
s2.setTarget(balls.get(3));
定義動畫順序
((AnimatorSet)animation).play(animX).before(animY);//animX在animY前面
((AnimatorSet)animation).play(animX).with(animY);//animX與animY同步執行
//圓弧加速器
new CycleInterpolator(2.0f)


//定義各種屬性>匯總
PropertyValuesHolder animY=PropertyValuesHolder.ofFloat(y,balls.get(1).getY(),getHeight()-100);
PropertyValuesHolder alpha=PropertyValuesHolder.ofFloat(alpha,1.0f,.5f);
ObjectAnimator pvhAlpha=ObjectAnimator.ofPropertyValuesHolder(balls.get(1), animY,alpha).setDuration(1000);
//設置放大動畫
PropertyValuesHolder widthHolder=PropertyValuesHolder.ofFloat(width,ball.getWidth(),ball.getWidth()*2);
PropertyValuesHolder heightHolder=PropertyValuesHolder.ofFloat(height,ball.getHeight(),ball.getHeight()*2);
PropertyValuesHolder xPt=PropertyValuesHolder.ofFloat(x,ball.getX(),ball.getX()-BALL_SIZE/2f);
PropertyValuesHolder yPt=PropertyValuesHolder.ofFloat(y,ball.getY(),ball.getY()-BALL_SIZE/2f);
ObjectAnimator sumAnimator=ObjectAnimator.ofPropertyValuesHolder(ball,widthHolder,heightHolder,xPt,yPt).setDuration(750);
sumAnimator.setRepeatMode(ValueAnimator.REVERSE);
sumAnimator.setRepeatCount(1);//設置repeatCount=1使其恢復原樣
//轉換動畫的軌跡
bounceAnim.reverse();

***************************************ObjectAnimator組件應用*************************************

位移:移動的單位為像素,可以指定一系列的位置
ObjectAnimator.ofFloat(target,translationX,0,50).setDuration(duration).start();
ObjectAnimator.ofFloat(target,translationY,0,50,-50,0).setDuration(duration).start();
縮放:1.0f代表為原來長/寬度的1倍,同理其他.所有的倍數都是因最早設定的寬度成倍
ObjectAnimator.ofFloat(target,scaleX,1,2,1).setDuration(duration).start();
ObjectAnimator.ofFloat(target,scaleY,1,2).setDuration(duration).start();
透明度:1.0f表示不透明 0表示全透明
ObjectAnimator.ofFloat(target,alpha,1,0,1).setDuration(duration).start();
旋轉:
ObjectAnimator.ofFloat(target,rotationX,0,180,0).setDuration(duration).start();
ObjectAnimator.ofFloat(target,rotationY,0,360).setDuration(duration).start();
ObjectAnimator.ofFloat(target,rotation,0,180,0).setDuration(duration).start();
設置變換中心;當然,多個動畫可以組合變換
ViewHelper.setPivotX(target,target.getWidth()/2);
ViewHelper.setPivotY(target,target.getHeight()/2);

***************************************ViewPropertyAnimator組件應用*************************************
animate(target).setDuration(2000);
animate(animatingButton).alpha(0);
animate(animatingButton).x(xValue).y(yValue);
animate(animatingButton).rotationYBy(720);


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved