Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
android¶¯»­Ñ§Ï°
 
×÷Õß ÉÆË¼ÉÆÑ§µÄBLOG£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-12
  2606  次浏览      31
 

1. View Animation£¨Tween Animation£©

View Animation£¨Tween Animation£©£º²¹¼ä¶¯»­£¬¸ø³öÁ½¸ö¹Ø¼üÖ¡£¬Í¨¹ýһЩËã·¨½«¸ø¶¨ÊôÐÔÖµÔÚ¸ø¶¨µÄʱ¼äÄÚÔÚÁ½¸ö¹Ø¼üÖ¡¼ä½¥±ä¡£

View animationÖ»ÄÜÓ¦ÓÃÓÚView¶ÔÏ󣬶øÇÒÖ»Ö§³ÖÒ»²¿·ÖÊôÐÔ£¬ÈçÖ§³ÖËõ·ÅÐýת¶ø²»Ö§³Ö±³¾°ÑÕÉ«µÄ¸Ä±ä¡£

¶øÇÒ¶ÔÓÚView animation£¬ËüÖ»ÊǸıäÁËView¶ÔÏó»æÖƵÄλÖ㬶øÃ»ÓиıäView¶ÔÏó±¾Éí£¬±ÈÈ磬ÄãÓÐÒ»¸öButton£¬×ø±ê£¨100,100£©£¬Width:200,Height:50£¬¶øÄãÓÐÒ»¸ö¶¯»­Ê¹Æä±äΪWidth£º100£¬Height£º100£¬Äã»á·¢ÏÖ¶¯»­¹ý³ÌÖд¥·¢°´Å¥µã»÷µÄÇøÓòÈÔÊÇ(100,100)-(300,150)¡£

View Animation¾ÍÊÇһϵÁÐViewÐÎ×´µÄ±ä»»£¬Èç´óСµÄËõ·Å£¬Í¸Ã÷¶ÈµÄ¸Ä±ä£¬Î»Öõĸı䣬¶¯»­µÄ¶¨Òå¼È¿ÉÒÔÓôúÂ붨ÒåÒ²¿ÉÒÔÓÃXML¶¨Ò壬µ±È»£¬½¨ÒéÓÃXML¶¨Òå¡£

¿ÉÒÔ¸øÒ»¸öViewͬʱÉèÖöà¸ö¶¯»­£¬±ÈÈç´Ó͸Ã÷ÖÁ²»Í¸Ã÷µÄµ­ÈëЧ¹û£¬Óë´ÓСµ½´óµÄ·Å´óЧ¹û£¬ÕâЩ¶¯»­¿ÉÒÔͬʱ½øÐУ¬Ò²¿ÉÒÔÔÚÒ»¸öÍê³ÉÖ®ºó¿ªÊ¼ÁíÒ»¸ö¡£

ÓÃXML¶¨ÒåµÄ¶¯»­·ÅÔÚ/res/anim/Îļþ¼ÐÄÚ£¬XMLÎļþµÄ¸ùÔªËØ¿ÉÒÔΪ<alpha>,<scale>,<translate>,<rotate>,interpolatorÔªËØ»ò<set>(±íʾÒÔÉϼ¸¸ö¶¯»­µÄ¼¯ºÏ£¬set¿ÉÒÔǶÌ×)¡£Ä¬ÈÏÇé¿öÏ£¬ËùÓж¯»­ÊÇͬʱ½øÐеģ¬¿ÉÒÔͨ¹ýstartOffsetÊôÐÔÉèÖø÷¸ö¶¯»­µÄ¿ªÊ¼Æ«ÒÆ£¨¿ªÊ¼Ê±¼ä£©À´´ïµ½¶¯»­Ë³Ðò²¥·ÅµÄЧ¹û¡£

¿ÉÒÔͨ¹ýÉèÖÃinterpolatorÊôÐԸı䶯»­½¥±äµÄ·½Ê½£¬ÈçAccelerateInterpolator£¬¿ªÊ¼Ê±Âý£¬È»ºóÖ𽥼ӿ졣ĬÈÏΪAccelerateDecelerateInterpolator¡£

¶¨ÒåºÃ¶¯»­µÄXMLÎļþºó£¬¿ÉÒÔͨ¹ýÀàËÆÏÂÃæµÄ´úÂë¶ÔÖ¸¶¨ViewÓ¦Óö¯»­¡£

ImageView spaceshipImage = (ImageView)findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation=AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

2. Drawable Animation£¨Frame Animation£©

Drawable Animation£¨Frame Animation£©£ºÖ¡¶¯»­£¬¾ÍÏñGIFͼƬ£¬Í¨¹ýһϵÁÐDrawableÒÀ´ÎÏÔʾÀ´Ä£Ä⶯»­µÄЧ¹û¡£ÔÚXMLÖе͍Ò巽ʽÈçÏ£º

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 

2 android:oneshot="true">
3 <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
5 <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
6 <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
7 </animation-list>

±ØÐëÒÔ<animation-list>Ϊ¸ùÔªËØ£¬ÒÔ<item>±íʾҪÂÖ»»ÏÔʾµÄͼƬ£¬durationÊôÐÔ±íʾ¸÷ÏîÏÔʾµÄʱ¼ä¡£XMLÎļþÒª·ÅÔÚ/res/drawable/Ŀ¼Ï¡£Ê¾Àý£º

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setBackgroundResource(R.drawable.drawable_anim);
anim = (AnimationDrawable) imageView.getBackground();
}

public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
anim.stop();
anim.start();
return true;
}
return super.onTouchEvent(event);
}

ÎÒÔÚʵÑéÖÐÓöµ½Á½µãÎÊÌ⣺

1.ÒªÔÚ´úÂëÖе÷ÓÃImageviewµÄsetBackgroundResource·½·¨£¬Èç¹ûÖ±½ÓÔÚXML²¼¾ÖÎļþÖÐÉèÖÃÆäsrcÊôÐÔµ±´¥·¢¶¯»­Ê±»áFC¡£

2.ÔÚ¶¯»­start()֮ǰҪÏÈstop()£¬²»È»ÔÚµÚÒ»´Î¶¯»­Ö®ºó»áÍ£ÔÚ×îºóÒ»Ö¡£¬ÕâÑù¶¯»­¾ÍÖ»»á´¥·¢Ò»´Î¡£

3.×îºóÒ»µãÊÇSDKÖÐÌáµ½µÄ£¬²»ÒªÔÚonCreateÖе÷ÓÃstart£¬ÒòΪAnimationDrawable»¹Ã»ÓÐÍêÈ«¸úWindowÏà¹ØÁª£¬Èç¹ûÏëÒª½çÃæÏÔʾʱ¾Í¿ªÊ¼¶¯»­µÄ»°£¬¿ÉÒÔÔÚonWindowFoucsChanged()Öе÷ÓÃstart()¡£

3. Property Animation

ÊôÐÔ¶¯»­£¬Õâ¸öÊÇÔÚAndroid 3.0ÖвÅÒý½øµÄ£¬ÒÔǰѧWPFʱÀïÃæµÄ¶¯»­»úÖÆºÃÏñ¾ÍÊÇÕâ¸ö£¬Ëü¸ü¸ÄµÄÊǶÔÏóµÄʵ¼ÊÊôÐÔ£¬ÔÚView Animation£¨Tween Animation£©ÖУ¬Æä¸Ä±äµÄÊÇViewµÄ»æÖÆÐ§¹û£¬ÕæÕýµÄViewµÄÊôÐÔ±£³Ö²»±ä£¬±ÈÈçÎÞÂÛÄãÔÚ¶Ô»°ÖÐÈçºÎËõ·ÅButtonµÄ´óС£¬ButtonµÄÓÐЧµã»÷ÇøÓò»¹ÊÇûÓÐÓ¦Óö¯»­Ê±µÄÇøÓò£¬ÆäλÖÃÓë´óС¶¼²»±ä¡£¶øÔÚProperty AnimationÖУ¬¸Ä±äµÄÊǶÔÏóµÄʵ¼ÊÊôÐÔ£¬ÈçButtonµÄËõ·Å£¬ButtonµÄλÖÃÓë´óСÊôÐÔÖµ¶¼¸Ä±äÁË¡£¶øÇÒProperty Animation²»Ö¹¿ÉÒÔÓ¦ÓÃÓÚView£¬»¹¿ÉÒÔÓ¦ÓÃÓÚÈκζÔÏó¡£Property AnimationÖ»ÊDZíʾһ¸öÖµÔÚÒ»¶Îʱ¼äÄڵĸı䣬µ±Öµ¸Ä±äʱҪ×öʲôÊÂÇéÍêÈ«ÊÇÄã×Ô¼º¾ö¶¨µÄ¡£

ÔÚProperty AnimationÖУ¬¿ÉÒÔ¶Ô¶¯»­Ó¦ÓÃÒÔÏÂÊôÐÔ£º

1.Duration£º¶¯»­µÄ³ÖÐøÊ±¼ä

2.TimeInterpolation£ºÊôÐÔÖµµÄ¼ÆË㷽ʽ£¬ÈçÏÈ¿ìºóÂý

3.TypeEvaluator£º¸ù¾ÝÊôÐԵĿªÊ¼¡¢½áÊøÖµÓëTimeInterpolation¼ÆËã³öµÄÒò×Ó¼ÆËã³öµ±Ç°Ê±¼äµÄÊôÐÔÖµ

4.Repeat Country and behavoir£ºÖظ´´ÎÊýÓ뷽ʽ£¬Èç²¥·Å3´Î¡¢5´Î¡¢ÎÞÏÞÑ­»·£¬¿ÉÒԴ˶¯»­Ò»Ö±Öظ´£¬»ò²¥·ÅÍêʱÔÙ·´Ïò²¥·Å

5.Animation sets£º¶¯»­¼¯ºÏ£¬¼´¿ÉÒÔͬʱ¶ÔÒ»¸ö¶ÔÏóÓ¦Óü¸¸ö¶¯»­£¬ÕâЩ¶¯»­¿ÉÒÔͬʱ²¥·ÅÒ²¿ÉÒÔ¶Ô²»Í¬¶¯»­ÉèÖò»Í¬¿ªÊ¼Æ«ÒÆ

6.Frame refreash delay£º¶àÉÙʱ¼äË¢ÐÂÒ»´Î£¬¼´Ã¿¸ô¶àÉÙʱ¼ä¼ÆËãÒ»´ÎÊôÐÔÖµ£¬Ä¬ÈÏΪ10ms£¬×îÖÕË¢ÐÂʱ¼ä»¹ÊÜϵͳ½ø³Ìµ÷¶ÈÓëÓ²¼þµÄÓ°Ïì

3.1 Property AnimationµÄ¹¤×÷·½Ê½

¶ÔÓÚÏÂͼµÄ¶¯»­£¬Õâ¸ö¶ÔÏóµÄX×ø±êÔÚ40msÄÚ´Ó0ÒÆ¶¯µ½40 pixel.°´Ä¬ÈϵÄ10msË¢ÐÂÒ»´Î£¬Õâ¸ö¶ÔÏó»áÒÆ¶¯4´Î£¬Ã¿´ÎÒÆ¶¯40/4=10pixel¡£

Ò²¿ÉÒԸıäÊôÐÔÖµµÄ¸Ä±ä·½·¨£¬¼´ÉèÖò»Í¬µÄinterpolation£¬ÔÚÏÂͼÖÐÔ˶¯ËÙ¶ÈÏÈÖð½¥Ôö´óÔÙÖð½¥¼õС

ÏÂͼÏÔʾÁËÓëÉÏÊö¶¯»­Ïà¹ØµÄ¹Ø¼ü¶ÔÏó

ValueAnimator¼´±íʾһ¸ö¶¯»­£¬°üº¬¶¯»­µÄ¿ªÊ¼Öµ£¬½áÊøÖµ£¬³ÖÐøÊ±¼äµÈÊôÐÔ¡£

ValueAnimator·â×°ÁËÒ»¸öTimeInterpolator£¬TimeInterpolator¶¨ÒåÁËÊôÐÔÖµÔÚ¿ªÊ¼ÖµÓë½áÊøÖµÖ®¼äµÄ²åÖµ·½·¨¡£

ValueAnimator»¹·â×°ÁËÒ»¸öTypeAnimator£¬¸ù¾Ý¿ªÊ¼¡¢½áÊøÖµÓëTimeIniterpolator¼ÆËãµÃµ½µÄÖµ¼ÆËã³öÊôÐÔÖµ¡£

ValueAnimator¸ù¾Ý¶¯»­ÒѽøÐеÄʱ¼ä¸ú¶¯»­×Üʱ¼ä£¨duration£©µÄ±È¼ÆËã³öÒ»¸öʱ¼äÒò×Ó£¨0~1£©£¬È»ºó¸ù¾ÝTimeInterpolator¼ÆËã³öÁíÒ»¸öÒò×Ó£¬×îºóTypeAnimatorͨ¹ýÕâ¸öÒò×Ó¼ÆËã³öÊôÐÔÖµ£¬ÈçÉÏÀýÖÐ10msʱ£º

Ê×ÏȼÆËã³öʱ¼äÒò×Ó£¬¼´¾­¹ýµÄʱ¼ä°Ù·Ö±È£ºt=10ms/40ms=0.25

¾­²åÖµ¼ÆËã(inteplator)ºóµÄ²åÖµÒò×Ó:´óԼΪ0.15£¬ÉÏÊöÀý×ÓÖÐÓÃÁËAccelerateDecelerateInterpolator£¬¼ÆË㹫ʽΪ£¨input¼´ÎªÊ±¼äÒò×Ó£©£º

(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;  

×îºó¸ù¾ÝTypeEvaluator¼ÆËã³öÔÚ10msʱµÄÊôÐÔÖµ£º0.15*£¨40-0£©=6pixel¡£ÉÏÀýÖÐTypeEvaluatorΪFloatEvaluator£¬¼ÆËã·½·¨Îª £º

public Float evaluate(float fraction, Number startValue, Number endValue) {
float startFloat = startValue.floatValue();
return startFloat + fraction * (endValue.floatValue() - startFloat);
}

²ÎÊý·Ö±ðΪÉÏÒ»²½µÄ²åÖµÒò×Ó£¬¿ªÊ¼ÖµÓë½áÊøÖµ¡£

3.2 ValueAnimator

ValueAnimator°üº¬Property Animation¶¯»­µÄËùÓкËÐŦÄÜ£¬È綯»­Ê±¼ä£¬¿ªÊ¼¡¢½áÊøÊôÐÔÖµ£¬ÏàӦʱ¼äÊôÐÔÖµ¼ÆËã·½·¨µÈ¡£Ó¦ÓÃProperty AnimationÓÐÁ½¸ö²½¾Û£º

1.¼ÆËãÊôÐÔÖµ

2.¸ù¾ÝÊôÐÔÖµÖ´ÐÐÏàÓ¦µÄ¶¯×÷£¬Èç¸Ä±ä¶ÔÏóµÄijһÊôÐÔ¡£

ValuAnimiatorÖ»Íê³ÉÁ˵ÚÒ»²½¹¤×÷£¬Èç¹ûÒªÍê³ÉµÚ¶þ²½£¬ÐèҪʵÏÖValueAnimator.onUpdateListener½Ó¿Ú£¬È磺

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Log.i("update", ((Float) animation.getAnimatedValue()).toString());
}
});
animation.setInterpolator(new CycleInterpolator(3));
animation.start();

´ËʾÀýÖÐÖ»ÊÇÏòLogcatÊä³öÁËһЩÐÅÏ¢£¬¿ÉÒÔ¸ÄΪÏë×öµÄ¹¤×÷¡£

Animator.AnimatorListener

onAnimationStart()

onAnimationEnd()

onAnimationRepeat()

onAnimationCance

ValueAnimator.AnimatorUpdateListener

onAnimationUpdate()¡¡¡¡//ͨ¹ý¼àÌýÕâ¸öʼþÔÚÊôÐÔµÄÖµ¸üÐÂʱִÐÐÏàÓ¦µÄ²Ù×÷£¬¶ÔÓÚValueAnimatorÒ»°ãÒª¼àÌý´ËʼþÖ´ÐÐÏàÓ¦µÄ¶¯×÷£¬²»È»AnimationûÒâÒ壨¿ÉÓÃÓÚ¼ÆÊ±£©£¬ÔÚObjectAnimator£¨¼Ì³Ð×ÔValueAnimator£©Öлá×Ô¶¯¸üÐÂÊôÐÔ£¬ÈçÎÞ±ØÒª²»±Ø¼àÌý¡£ÔÚº¯ÊýÖлᴫµÝÒ»¸öValueAnimator²ÎÊý£¬Í¨¹ý´Ë²ÎÊýµÄgetAnimatedValue()È¡µÃµ±Ç°¶¯»­ÊôÐÔÖµ¡£

¿ÉÒԼ̳ÐAnimatorListenerAdapter¶ø²»ÊÇʵÏÖAnimatorListener½Ó¿ÚÀ´¼ò»¯²Ù×÷£¬Õâ¸öÀà¶ÔAnimatorListenerÖеĺ¯Êý¶¼¶¨ÒåÁËÒ»¸ö¿Õº¯ÊýÌ壬ÕâÑùÎÒÃǾÍÖ»Óö¨ÒåÏë¼àÌýµÄʼþ¶ø²»ÓÃʵÏÖÿ¸öº¯ÊýÈ´Ö»¶¨ÒåÒ»¿Õº¯ÊýÌå¡£

ObjectAnimator oa=ObjectAnimator.ofFloat(tv, "alpha", 0f, 1f);
oa.setDuration(3000);
oa.addListener(new AnimatorListenerAdapter(){
public void on AnimationEnd(Animator animation){
Log.i("Animation","end");
}
});
oa.start();

3.3 ObjectAnimator

¼Ì³Ð×ÔValueAnimator£¬ÒªÖ¸¶¨Ò»¸ö¶ÔÏ󼰸öÔÏóµÄÒ»¸öÊôÐÔ£¬µ±ÊôÐÔÖµ¼ÆËãÍê³Éʱ×Ô¶¯ÉèÖÃΪ¸Ã¶ÔÏóµÄÏàÓ¦ÊôÐÔ£¬¼´Íê³ÉÁËProperty AnimationµÄÈ«²¿Á½²½²Ù×÷¡£Êµ¼ÊÓ¦ÓÃÖÐÒ»°ã¶¼»áÓÃObjectAnimatorÀ´¸Ä±äijһ¶ÔÏóµÄijһÊôÐÔ£¬µ«ÓÃObjectAnimatorÓÐÒ»¶¨µÄÏÞÖÆ£¬ÒªÏëʹÓÃObjectAnimator£¬Ó¦¸ÃÂú×ãÒÔÏÂÌõ¼þ£º

1. ¶ÔÏóÓ¦¸ÃÓÐÒ»¸ösetterº¯Êý£ºset<PropertyName>£¨ÍÕ·åÃüÃû·¨£©

2. ÈçÉÏÃæµÄÀý×ÓÖУ¬ÏñofFloatÖ®ÀàµÄ¹¤³¡·½·¨£¬µÚÒ»¸ö²ÎÊýΪ¶ÔÏóÃû£¬µÚ¶þ¸öΪÊôÐÔÃû£¬ºóÃæµÄ²ÎÊýΪ¿É±ä²ÎÊý£¬Èç¹ûvalues¡­²ÎÊýÖ»ÉèÖÃÁËÒ»¸öÖµµÄ»°£¬ÄÇô»á¼Ù¶¨ÎªÄ¿µÄÖµ£¬ÊôÐÔÖµµÄ±ä»¯·¶Î§Îªµ±Ç°Öµµ½Ä¿µÄÖµ£¬ÎªÁË»ñµÃµ±Ç°Öµ£¬¸Ã¶ÔÏóÒªÓÐÏàÓ¦ÊôÐÔµÄgetter·½·¨£ºget<PropertyName>

3. Èç¹ûÓÐgetter·½·¨£¬ÆäÓ¦·µ»ØÖµÀàÐÍÓ¦ÓëÏàÓ¦µÄsetter·½·¨µÄ²ÎÊýÀàÐÍÒ»Ö¡£

Èç¹ûÉÏÊöÌõ¼þ²»Âú×㣬Ôò²»ÄÜÓÃObjectAnimator£¬Ó¦ÓÃValueAnimator´úÌæ¡£

tv=(TextView)findViewById(R.id.textview1);
btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
¡¡¡¡@Override
¡¡¡¡public void onClick(View v) {
¡¡¡¡¡¡¡¡ObjectAnimator oa=ObjectAnimator.ofFloat(tv, "alpha", 0f, 1f);
¡¡¡¡¡¡¡¡oa.setDuration(3000);
¡¡¡¡¡¡¡¡oa.start();
¡¡¡¡}
});

°ÑÒ»¸öTextViewµÄ͸Ã÷¶ÈÔÚ3ÃëÄÚ´Ó0±äÖÁ1¡£

¸ù¾ÝÓ¦Óö¯»­µÄ¶ÔÏó»òÊôÐԵIJ»Í¬£¬¿ÉÄÜÐèÒªÔÚonAnimationUpdateº¯ÊýÖе÷ÓÃinvalidate()º¯ÊýË¢ÐÂÊÓͼ¡£

3.4 ͨ¹ýAnimationSetÓ¦Óöà¸ö¶¯»­

AnimationSetÌṩÁËÒ»¸ö°Ñ¶à¸ö¶¯»­×éºÏ³ÉÒ»¸ö×éºÏµÄ»úÖÆ£¬²¢¿ÉÉèÖÃ×éÖж¯»­µÄʱÐò¹ØÏµ£¬Èçͬʱ²¥·Å£¬Ë³Ðò²¥·ÅµÈ¡£

ÒÔÏÂÀý×ÓͬʱӦÓÃ5¸ö¶¯»­£º

1.²¥·Åanim1£»

2.ͬʱ²¥·Åanim2,anim3,anim4£»

3.²¥·Åanim5¡£

AnimatorSet bouncer = new AnimatorSet(); 

2 bouncer.play(anim1).before(anim2); 

3 bouncer.play(anim2).with(anim3); 

4 bouncer.play(anim2).with(anim4) 

5 bouncer.play(anim5).after(amin2); 

6 animatorSet.start(); 

3.5 TypeEvalutors

¸ù¾ÝÊôÐԵĿªÊ¼¡¢½áÊøÖµÓëTimeInterpolation¼ÆËã³öµÄÒò×Ó¼ÆËã³öµ±Ç°Ê±¼äµÄÊôÐÔÖµ£¬androidÌṩÁËÒÔϼ¸¸öevalutor£º

1.IntEvaluator£ºÊôÐÔµÄÖµÀàÐÍΪint£»

2.FloatEvaluator£ºÊôÐÔµÄÖµÀàÐÍΪfloat£»

3.ArgbEvaluator£ºÊôÐÔµÄÖµÀàÐÍΪʮÁù½øÖÆÑÕɫֵ£»

4.TypeEvaluator£ºÒ»¸ö½Ó¿Ú£¬¿ÉÒÔͨ¹ýʵÏָýӿÚ×Ô¶¨ÒåEvaluator¡£

×Ô¶¨ÒåTypeEvalutorºÜ¼òµ¥£¬Ö»ÐèҪʵÏÖÒ»¸ö·½·¨£¬ÈçFloatEvalutorµÄ¶¨Ò壺

public class FloatEvaluator implements TypeEvaluator { 

2     public Object evaluate(float fraction, Object startValue, Object endValue) { 

3         float startFloat = ((Number) startValue).floatValue(); 

4         return startFloat + fraction * (((Number) endValue).floatValue() - startFloat); 

5     } 

6 } 

¸ù¾Ý¶¯»­Ö´ÐеÄʱ¼ä¸úÓ¦ÓõÄInterplator£¬»á¼ÆËã³öÒ»¸ö0~1Ö®¼äµÄÒò×Ó£¬¼´evaluteº¯ÊýÖеÄfraction²ÎÊý£¬Í¨¹ýÉÏÊöFloatEvaluatorÓ¦¸ÃºÜºÃ¿´³öÆäÒâ˼¡£

3.6 TimeInterplator

time interplator¶¨ÒåÁËÊôÐÔÖµ±ä»¯µÄ·½Ê½£¬ÈçÏßÐÔ¾ùÔȸı䣬¿ªÊ¼ÂýÈ»ºóÖ𽥿ìµÈ¡£ÔÚProperty AnimationÖÐÊÇTimeInterplator£¬ÔÚView AnimationÖÐÊÇInterplator£¬ÕâÁ½¸öÊÇÒ»ÑùµÄ£¬ÔÚ3.0֮ǰֻÓÐInterplator£¬3.0Ö®ºóʵÏÖ´úÂë×ªÒÆÖÁÁËTimeInterplator¡£Interplator¼Ì³Ð×ÔTimeInterplator£¬ÄÚ²¿Ã»ÓÐÈÎºÎÆäËû´úÂë¡£

1.AccelerateInterpolator¡¡¡¡¡¡¡¡¡¡ ¼ÓËÙ£¬¿ªÊ¼Ê±ÂýÖмä¼ÓËÙ

2.DecelerateInterpolator¡¡¡¡¡¡ ¡¡¡¡ ¼õËÙ£¬¿ªÊ¼Ê±¿ìÈ»ºó¼õËÙ

3.AccelerateDecelerateInterolator¡¡ ÏȼÓËÙºó¼õËÙ£¬¿ªÊ¼½áÊøÊ±Âý£¬Öмä¼ÓËÙ

4.AnticipateInterpolator¡¡¡¡¡¡¡¡¡¡¡¡ ·´Ïò £¬ÏÈÏòÏà·´·½Ïò¸Ä±äÒ»¶ÎÔÙ¼ÓËÙ²¥·Å

5.AnticipateOvershootInterpolator¡¡ ·´Ïò¼Ó³¬Ô½£¬ÏÈÏòÏà·´·½Ïò¸Ä±ä£¬ÔÙ¼ÓËÙ²¥·Å£¬»á³¬³öÄ¿µÄֵȻºó»ºÂýÒÆ¶¯ÖÁÄ¿µÄÖµ

6.BounceInterpolator¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ÌøÔ¾£¬¿ìµ½Ä¿µÄֵʱֵ»áÌøÔ¾£¬ÈçÄ¿µÄÖµ100£¬ºóÃæµÄÖµ¿ÉÄÜÒÀ´ÎΪ85£¬77£¬70£¬80£¬90£¬100

7.CycleIinterpolator¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Ñ­»·£¬¶¯»­Ñ­»·Ò»¶¨´ÎÊý£¬ÖµµÄ¸Ä±äΪһÕýÏÒº¯Êý£ºMath.sin(2 * mCycles * Math.PI * input)

8.LinearInterpolator¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ÏßÐÔ£¬ÏßÐÔ¾ùÔȸıä

9.OvershottInterpolator¡¡¡¡¡¡¡¡¡¡¡¡ ³¬Ô½£¬×îºó³¬³öÄ¿µÄֵȻºó»ºÂý¸Ä±äµ½Ä¿µÄÖµ

10.TimeInterpolator¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Ò»¸ö½Ó¿Ú£¬ÔÊÐíÄã×Ô¶¨Òåinterpolator£¬ÒÔÉϼ¸¸ö¶¼ÊÇʵÏÖÁËÕâ¸ö½Ó¿Ú

3.7 µ±Layout¸Ä±äʱӦÓö¯»­

ViewGroupÖеÄ×ÓÔªËØ¿ÉÒÔͨ¹ýsetVisibilityʹÆäVisible¡¢Invisible»òGone£¬µ±ÓÐ×ÓÔªËØ¿É¼ûÐԸıäʱ£¬¿ÉÒÔÏòÆäÓ¦Óö¯»­£¬Í¨¹ýLayoutTransitionÀàÓ¦ÓôËÀද»­£º

transition.setAnimator(LayoutTransition.DISAPPEARING, customDisappearingAnim);

ͨ¹ýsetAnimatorÓ¦Óö¯»­£¬µÚÒ»¸ö²ÎÊý±íʾӦÓõÄÇé¾³£¬¿ÉÒÔÒÔÏÂ4ÖÖÀàÐÍ£º

1.APPEARING¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡µ±Ò»¸öÔªËØ±äΪVisibleʱ¶ÔÆäÓ¦Óõ͝»­

2.CHANGE_APPEARING¡¡¡¡¡¡µ±Ò»¸öÔªËØ±äΪVisibleʱ£¬ÒòÏµÍ³ÒªÖØÐ²¼¾ÖÓÐÒ»Ð©ÔªËØÐèÒªÒÆ¶¯£¬ÕâÐ©ÒªÒÆ¶¯µÄÔªËØÓ¦Óõ͝»­

3.DISAPPEARING¡¡¡¡¡¡¡¡¡¡¡¡µ±Ò»¸öÔªËØ±äΪInVisibleʱ¶ÔÆäÓ¦Óõ͝»­

4.CHANGE_DISAPPEARING¡¡µ±Ò»¸öÔªËØ±äΪGoneʱ£¬ÒòÏµÍ³ÒªÖØÐ²¼¾ÖÓÐÒ»Ð©ÔªËØÐèÒªÒÆ¶¯£¬ÕâÐ©ÒªÒÆ¶¯µÄÔªËØÓ¦Óõ͝»­ disappearing from the container.

µÚ¶þ¸ö²ÎÊýΪһAnimator¡£

mTransitioner.setStagger(LayoutTransition.CHANGE_APPEARING, 30);

´Ëº¯ÊýÉèÖö¯»­³ÖÐøÊ±¼ä£¬²ÎÊý·Ö±ðΪÀàÐÍÓëʱ¼ä¡£

3.8 Keyframes

keyFrameÊÇÒ»¸ö ʱ¼ä/Öµ ¶Ô£¬Í¨¹ýËü¿ÉÒÔ¶¨ÒåÒ»¸öÔÚÌØ¶¨Ê±¼äµÄÌØ¶¨×´Ì¬£¬¶øÇÒÔÚÁ½¸ökeyFrameÖ®¼ä¿ÉÒÔ¶¨Ò岻ͬµÄInterpolator£¬¾ÍÏ൱¶à¸ö¶¯»­µÄÆ´½Ó£¬µÚÒ»¸ö¶¯»­µÄ½áÊøµãÊǵڶþ¸ö¶¯»­µÄ¿ªÊ¼µã¡£KeyFrameÊdzéÏóÀ࣬Ҫͨ¹ýofInt(),ofFloat(),ofObject()»ñµÃÊʵ±µÄKeyFrame£¬È»ºóͨ¹ýPropertyValuesHolder.ofKeyframe»ñµÃPropertyValuesHolder¶ÔÏó£¬ÈçÒÔÏÂÀý×Ó£º

Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("width", kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn2, pvhRotation);
rotationAnim.setDuration(2000);

ÉÏÊö´úÂëµÄÒâ˼Ϊ£ºÉèÖÃbtn¶ÔÏóµÄwidthÊôÐÔֵʹÆä£º

1.¿ªÊ¼Ê± Width=400

2.¶¯»­¿ªÊ¼1/4ʱ Width=200

3.¶¯»­¿ªÊ¼1/2ʱ Width=400

4.¶¯»­¿ªÊ¼3/4ʱ Width=100

5.¶¯»­½áÊøÊ± Width=500

µÚÒ»¸ö²ÎÊýΪʱ¼ä°Ù·Ö±È£¬µÚ¶þ¸ö²ÎÊýÊÇÔÚµÚÒ»¸ö²ÎÊýµÄʱ¼äʱµÄÊôÐÔÖµ¡£

¶¨ÒåÁËһЩKeyframeºó£¬Í¨¹ýPropertyValuesHolderÀàµÄ·½·¨ofKeyframe·â×°£¬È»ºóͨ¹ýObjectAnimator.ofPropertyValuesHolder»ñµÃAnimator¡£

ÓÃÏÂÃæµÄ´úÂë¿ÉÒÔʵÏÖͬÑùµÄЧ¹û£º

ObjectAnimator oa=ObjectAnimator.ofInt(btn2, "width", 400,200,400,100,500);
oa.setDuration(2000);
oa.start();

3.9 Animating Views

ÔÚView AnimationÖУ¬¶ÔViewÓ¦ÓÃAnimation²¢Ã»ÓиıäViewµÄÊôÐÔ£¬¶¯»­µÄʵÏÖÊÇͨ¹ýÆäParent ViewʵÏֵģ¬ÔÚView±»drawnʱParents View¸Ä±äËüµÄ»æÖƲÎÊý£¬drawºóÔٸıä²ÎÊýinvalidate£¬ÕâÑùËäÈ»ViewµÄ´óС»òÐýת½Ç¶ÈµÈ¸Ä±äÁË£¬µ«ViewµÄʵ¼ÊÊôÐÔû±ä£¬ËùÒÔÓÐÐ§ÇøÓò»¹ÊÇÓ¦Óö¯»­Ö®Ç°µÄÇøÓò£¬±ÈÈçÄã°ÑÒ»°´Å¥·Å´óÁ½±¶£¬µ«»¹ÊÇ·Å´óÕâǰµÄÇøÓò¿ÉÒÔ´¥·¢µã»÷ʼþ¡£ÎªÁ˸ıäÕâÒ»µã£¬ÔÚAndroid 3.0ÖиøViewÔö¼ÓÁËһЩ²ÎÊý²¢¶ÔÕâЩ²ÎÊýÔö¼ÓÁËÏàÓ¦µÄgetter/setterº¯Êý£¨ObjectAnimatorÒªÓÃÕâЩº¯Êý¸Ä±äÕâЩÊôÐÔ£©£º

1.translationX,translationY:ת»»×ø±ê£¨control where the View is located as a delta from its left and top coordinates which are set by its layout container.£©

2.rotation,rotationX,rotationY:Ðýת£¬rotationÓÃÓÚ2DÐýת½Ç¶È£¬3DÖÐÓõ½ºóÁ½¸ö

3.scaleX,scaleY:Ëõ·Å

4.x,y:ViewµÄ×îÖÕ×ø±ê£¨utility properties to describe the final location of the View in its container, as a sum of the left and top values and translationX and translationY values.£©

5.alpha:͸Ã÷¶È

¸úλÖÃÓйصIJÎÊýÓÐ3¸ö£¬ÒÔX×ø±êΪÀý£¬¿ÉÒÔͨ¹ýgetLeft(),getX(),getTranslateX()»ñµÃ£¬ÈôÓÐÒ»Button btn2£¬²¼¾ÖʱÆä×ø±êΪ£¨40,0£©£º

//Ó¦Óö¯»­Ö®Ç°btn2.getLeft();    //40btn2.getX();    //40btn2.getTranslationX();    
//0//Ó¦ÓÃtranslationX¶¯»­ObjectAnimator oa=ObjectAnimator.ofFloat(btn2,"translationX", 200);
oa.setDuration(2000);
oa.start();/*Ó¦ÓÃtranslationX¶¯»­ºó
btn2.getLeft(); //40
btn2.getX(); //240
btn2.getTranslationX(); //200*/ //Ó¦ÓÃX¶¯»­£¬¼ÙÉèûÓÐÓ¦ÓÃ֮ǰµÄtranslationX¶¯»­ObjectAnimator oa=ObjectAnimator.ofFloat(btn2, "x", 200);
oa.setDuration(2000);
oa.start();/*Ó¦ÓÃX¶¯»­ºó
btn2.getLeft(); //40
btn2.getX(); //200
btn2.getTranslationX(); //160*/

ÎÞÂÛÔõÑùÓ¦Óö¯»­£¬Ô­À´µÄ²¼¾ÖʱµÄλÖÃͨ¹ýgetLeft()»ñµÃ£¬±£³Ö²»±ä£»

XÊÇView×îÖÕµÄλÖã»

translationXΪ×îÖÕλÖÃÓë²¼¾Öʱ³õʼλÖÃÕâ²î¡£

ËùÒÔÈô¾ÍÓÃtranslationX¼´ÎªÔÚÔ­À´»ù´¡ÉÏÒÆ¶¯¶àÉÙ£¬XΪ×îÖÕ¶àÉÙ

getX()µÄֵΪgetLeft()ÓëgetTranslationX()µÄºÍ

¶ÔÓÚX¶¯»­£¬Ô´´úÂëÊÇÕâÑùµÄ£º

case X:
info.mTranslationX = value - mView.mLeft;
break;

Property AnimationÒ²¿ÉÒÔÔÚXMLÖж¨Òå

1.<set> - AnimatorSet

2.<animator> - ValueAnimator

3.<objectAnimator> - ObjectAnimator

XMLÎļþÓ¦·Å´ó/res/animator/ÖУ¬Í¨¹ýÒÔÏ·½Ê½Ó¦Óö¯»­£º

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.anim.property_animator);
set.setTarget(myObject);
set.start();

3.10 ViewPropertyAnimator

Èç¹ûÐèÒª¶ÔÒ»¸öViewµÄ¶à¸öÊôÐÔ½øÐж¯»­¿ÉÒÔÓÃViewPropertyAnimatorÀ࣬¸ÃÀà¶Ô¶àÊôÐÔ¶¯»­½øÐÐÁËÓÅ»¯£¬»áºÏ²¢Ò»Ð©invalidate()À´¼õÉÙË¢ÐÂÊÓͼ£¬¸ÃÀàÔÚ3.1ÖÐÒýÈë¡£

ÒÔÏÂÁ½¶Î´úÂëʵÏÖͬÑùµÄЧ¹û£º¡¡

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();

myView.animate().x(50f).y(100f);
   
2606 ´Îä¯ÀÀ       31
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ