ããã¯ãã¢ãã€ã«Yandex.MailããŒã ã®éçºè
ã§ããDmitry Svirikhinã«ããè¬çŸ©ã®ç¬¬2éšã§ãã
-åŒãç¶ãAndroidéçºè
ã®å
žåçãªåé¡ãšãã®è§£æ±ºæ¹æ³ãæ€èšããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã®UIã®äžæŽåã®åé¡ãããŒããŒããšã®å¯Ÿè©±æã«çºçããå¯èœæ§ã®ããåé¡ãç¶æ
ã倱ãåé¡ã®è§£æ±ºæ¹æ³ãããã³ã«ã¹ã¿ã ãã¥ãŒãå¹æçã«é©çšããæ¹æ³ã«ã€ããŠã¯æ¢ã«æ€èšããŸããã 2çªç®ã®éšåå
šäœãå¥ã®åé¡ã«å
ãŠãŸããããã¯ã察話æ§ã®æ¬ åŠããšåŒã°ããŸãã ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã«ãšã£ãŠããã€ã³ã¿ã©ã¯ãã£ãã§ç解ãããããã®ã«ããæ¹æ³ãèŠãŠã¿ãŸãããã
æåã«ãåæ¹åæ§ã®æ¬ åŠã®äŸãæããŸãã ç§ãä»ãäŒãããŠããå ±åæžã®äž»èŠãªãã€ã³ããšãšãã«ä»é²ã«æ»ããŸãã ããã§ããŠãŒã¶ãŒããããéãã2çªç®ã®éšåãã¿ãããããšããŠãŒã¶ãŒã«ã¯ãŸã£ããç解ã§ããªãäœããèµ·ãããŸãã
ããäžåºŠèŠãŠã¿ãŸãããã 第äºã®éšåãã¿ãããããšãçªç¶ãäœããèµ·ãããŸããã ãŠãŒã¶ãŒã¯ãä»äœãèµ·ãã£ãŠããã®ããç解ããç解ããããã«ããçšåºŠã®æéãå¿
èŠãšããŸãã ãããã£ãŠããã®æ¹æ³ã§ãã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠãã®ãŠãŒã¶ãŒã«ã¢ã¯ã·ã§ã³ã®æãŸããé åºãäŒããããšãã§ããŸãã
ããã2çªç®ã®éšåãæããã«ãªããæåã®éšåãäžãã£ãŠããŸãã åæã«ããŠãŒã¶ãŒã¯ãäžã«ã¹ã¯ããŒã«ãããšåã³æåã®éšåã«æ»ãããšãç解ããŸãããã®ãããªã¢ãã¡ãŒã·ã§ã³ã®ããã«ããŠãŒã¶ãŒã«ãšã£ãŠããã¯æçœã«ãªããŸãã
æ¢ã«ãæ³åã®ãšãããã¢ãã¡ãŒã·ã§ã³ã2017幎ã«ã¢ãã¡ãŒã·ã§ã³ãäœæããæ¹æ³ãå®éã«äœ¿çšã§ãããã®ã䜿çšãã¹ããã®ã«ã€ããŠèª¬æããŸãã
äžè¬çã«ã2017幎ã«åããã®ãäœæããæ¹æ³ã¯ãããããããŸãã 以äžã«ãªã¹ãã瀺ããŸãã ãããŠãããªãã¯ãã§ã«ããªãã®è¬çŸ©ã§ãããã®ããã€ãã«éšåçã«è§ŠããŠãããããããŸããã ããããä»ãç§ãã¡ã¯ãããã®ããããã«æ·±ã没é ããã©ããæ¬åœã«å¿
èŠãªã®ããç解ããŸãã
ã¢ãã¡ãŒã·ã§ã³ã®è¡šç€ºããå§ããŸãã ããã¯ãããŒãžã§ã³2.3ã§Androidã䜿çšããåã®ãã¥ãŒãã¢ãã¡ãŒã·ã§ã³åããäž»ãªæ¹æ³ã§ãã ãããŠ2009幎ãã2010幎ã«ã¯ãäœããå転ããŠããã ããªãã誰ãã¢ãã¡ãŒã·ã§ã³ã«ã€ããŠå
šãèããŠããŸããã§ããã ãããã£ãŠãViewã¢ãã¡ãŒã·ã§ã³ã«ã¯ãã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠè¡ãããšãã§ãããããã®å€æŽã®çµ¶å¯Ÿçã«å°ããªã»ããããããŸãã ãã ãã倧ããªãã€ãã¹ç¹ã1ã€ãããŸããããã¯ãã¬ã³ããªã³ã°æ®µéã§ãã¥ãŒãã¥ãŒãå€æŽããã ãã§ãã ã€ãŸããããšãã°ç»é¢ããé£ã³åºããããªçš®é¡ã®ãã¿ã³ãäœæããå Žåãã¢ãã¡ãŒã·ã§ã³äžã«ãã¿ã³ãå
ã
ãã£ãå Žæãã¯ãªãã¯ãããšããã®ãã¿ã³ã®ã¯ãªãã¯ãšããŠèšç®ãããŸãã ãããã£ãŠããã®ã¢ãã¡ãŒã·ã§ã³ã®æ¹æ³ã¯æ代é
ãã§ãããšèšãããšãã§ãã2017幎ã«ããã䜿çšãã䟡å€ã¯ãããŸããããããã£ãŠã詳现ã«æ€èšãããããã«æ¬¡ã®æ¹æ³ã«é²ã¿ãŸãã
æç»å¯èœãªã¢ãã¡ãŒã·ã§ã³ã¯ããããç解ããããã«ã¢ãã¡ãŒã·ã§ã³ãäœæããæ¹æ³ã§ãããæãç°¡åãªæ¹æ³ã¯ããããè¡šãXMLã調ã¹ãããšã§ãã å®éãããã¯éåžžã®ãã¬ãŒã ããšã®ã¢ãã¡ãŒã·ã§ã³ã§ããããã以äžã®ãã®ã§ã¯ãããŸããã ãŸããä»ã®æ¹æ³ã§ã¯å®è¡ã§ããªãéåžžã«è€éãªå Žåã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã ãã®ã¢ãã¡ãŒã·ã§ã³ã¯ãã·ã¹ãã ããšã«éåžžã«è€éã§ãããªããªããããããåãã¬ãŒã ã«å¯ŸããŠããæ°ãããããŠã¢ãã«ãããŒãããå¿
èŠãããããã§ãã ãããã£ãŠã極端ãªå Žåã«ã®ã¿äœ¿çšãã䟡å€ããããŸãã
ãããŠãæãèå³æ·±ããã®ã§ããValueAnimatorã«é²ã¿ãŸããããã¯ãAndroidã®3çªç®ã®ããŒãžã§ã³ã«ç»å ŽããŸããã ããã¯åºæ¬çãªã¢ãã¡ãŒã·ã§ã³ãšã³ãžã³ã§ãã ãã®ãã©ã¹ã¯ã絶察ã«ãã¥ãŒã«æ·»ä»ãããªãããšã§ãã ValueAnimatorã«ã¯ããã¬ãŒã 圢æã®ããã»ã¹ã§ç¬èªã®åŒã³åºãéå±€ããããŸãã ãããŠãValueAnimatorã§äœããã¢ãã¡ãŒã·ã§ã³åããã«ã¯äœãå¿
èŠã§ããïŒ åæå€ãæçµå€ããªã¹ããŒã瀺ãå€ãæå®ããå¿
èŠããããŸãããªã¹ããŒã§ã¯ãäžéå€ãååŸããããã¥ãŒã®ããã€ãã§ãããã䜿çšã§ããŸãã
äžè¬çã«ãã¯ã©ã€ã¢ã³ãéçºã§ã¯ãValueAnimatorã¯ããŸã䜿çšãããŸããããããã䜿çšããããã«ã©ã®ã³ãŒããèšè¿°ããå¿
èŠããããã¯ãŸã ããããŸãã
ããªããæ³åããããšãã§ããæãã·ã³ãã«ã§éå±ãªã¢ãã¡ãŒã·ã§ã³ãèŠãŠãããŸã-ããã¯ã¯ãã¹ãã§ãŒãã§ãã ããã¯ã·ã³ãã«ã§éå±ã§ãããããã«ãããããããç»é¢ãå€æŽãããšãã«ããã€ãã®ã³ãŒããŒãæ»ããã«ããå¿
èŠãããå Žåãå¿
èŠãªãšãã«ããŸãæ©èœããŸãã
ãã®ã¯ãã¹ãã§ãŒããæ©èœããããã«ãValueAnimatorããå¿
èŠãªã³ãŒããããã«èŠãŠã¿ãŸãããã å€ã0ãã1ããã³1ãã0ã«ã¢ãã¡ãŒãããã«ã¯ããããã2ã€ã®ValueAnimatorsãäœæããå¿
èŠããããŸãã 次ã«ãããããã«UpdateListenerãèšå®ããŸããã¢ãã¡ãŒã¿ãŒããçŸåšã®ã¢ãã¡ãŒã·ã§ã³å€ãååŸããsetAlphaã¡ãœããã䜿çšããŠãã¥ãŒã«çŽæ¥ç§»åããŸãã ãŸããAnimatorSetãå¿
èŠã§ããããã¯ãé 次ãŸãã¯äžŠè¡ããŠå®è¡ã§ããå€ãã®ã¢ãã¡ãŒã¿ãŒãå®çŸ©ããŸãã ãããèªåã§æ±ºå®ããŸãã ç§ãã¡ã®å Žåã圌ããèšãããã«ãplayTogetherã¡ãœããã¯åæã«å®è¡ãããŸãã
ãŸãããã®ã¢ãã¡ãŒã·ã§ã³ã®é·ããããã³åŒã³åºããªã¹ããŒãã¢ãã¡ãŒã·ã§ã³ã®éå§åãšçµäºåŸã«åŒã³åºãã¡ãœãããèšå®ããŸãã ãããã£ãŠãã¢ãã¡ãŒã·ã§ã³ãéå§ããåã«ãå¿
èŠãªãã¥ãŒã衚瀺ããŸãã ã¢ãã¡ãŒã·ã§ã³ãçµäºãããšããã¥ãŒãé衚瀺ã«ãªããããã«å¿ããŠè¡šç€ºãæ¶ããŸãã
次ã«ãValueAnimator.ofintã䜿çšããŠ0ãã255ãŸã§ã®æŽæ°ãã¢ãã¡ãŒã·ã§ã³åããäŸã䜿çšããŠãã¢ãã¡ãŒã¿ãŒãšã³ãžã³ã®äžè¬çãªåäœãèŠãŠã¿ãŸãããã
Animatorã®æéã¯0ã1ã®å®æ°å€ãšããŠè¡šãããŸããã€ãŸããAndroidã®ãã¬ãŒã ã16ããªç§ãš2/3ããªç§ã§æç»ãããããšãèæ
®ãããšã167ããªç§ã®ã¢ãã¡ãŒã·ã§ã³ããããšããŸãã 10ãã¬ãŒã ã§å®è¡ããå¿
èŠããããŸãã ã€ãŸããåèšæéã®1/10ã¯ããšã³ãžã³ã«è¡šç€ºããããšãããåãã¬ãŒã ã«å¯ŸããŠã§ãã
4çªç®ã®ãã¬ãŒã ã®ã¢ãã¡ãŒã·ã§ã³èšç®ãã©ã®ããã«èŠããããã€ãŸããã¢ãã¡ãŒã¿ãŒæéã0.4ã®å ŽåãèŠãŠã¿ãŸãããã
æåã«ã0.4ã®å€ãTimeInterpolatorã«åé¡ãããŸããããã¯ãã¢ãã¡ãŒã·ã§ã³ã®çºçé床ã決å®ããé¢æ°ã§ãã ããšãã°ãã¢ãã¡ãŒã·ã§ã³ã®é床ãäžãããå Žåã¯ãäŸãšããŠAccelerateInterpolatorã䜿çšã§ããŸãã éåžžã®2次é¢æ°ã®å¢å é¢æ°ã決å®ããŸãããŸããTimeInterpolatorãå
¥åã§0ãã1ã®å€ãåãåããããã«å¿ããŠãããè¿ãå¿
èŠãããããšã泚ç®ã«å€ããŸãã
ãããã£ãŠããã®å Žåã®TimeInterpolatorã¯å€0.16ãè¿ããŸããããã¯è£éæéãšåŒã°ããæ¢ã«TypeEvaluatorã«äŸçµŠãããŠããŸãã TypeEvaluatorã¯ãæéã«å¯ŸããŠã¢ãã¡ãŒã·ã§ã³äžã«ãªããžã§ã¯ããã©ã®ããã«å€åãããã決å®ããŸãã ã€ãŸããããšãã°ãåçŽãªintãã¢ãã¡ãŒãããå Žåããã¹ãŠãããã§éåžžã«ç°¡åã«èšç®ãããŸããæçµå€ãååŸããããããåæå€ãæžç®ããæéãæããŸãã ãã®äŸã§ã¯ã0.16ã§ãã çµæã®å€40ãAnimatorã«è¿ãããAnimatorã«èšå®ãããåŸããã®AnimatorãUpdateListenerã«ã¹ããŒãããŸãã å¿
èŠãªãã®ãã¹ãŠ-ã¢ãã¡ãŒã·ã§ã³åãããå€-ãååŸããäœããã®ãã¥ãŒãé©çšã§ããŸãã ããã¯ããµã³ãã«ã³ãŒãã§è¡ãããŸããã
ããã§æãéèŠãªããšã¯ãTimeInterpolatorãšTypeEvaluatorã眮ãæããŠãããããã®å Žåã«å¿
èŠãªæ¹æ³ãæ£ç¢ºã«å®è¡ã§ããããšãç解ããããšã§ãã
ãŸããã·ã¹ãã å
ã®TimeInterpolatorsãèŠãŠã¿ãŸãããã
ãŸããæãå€å
žçãªãã®ãæ€èšããŠãã ããã äž»ã«ãããŠæãé »ç¹ã«äœ¿çšããã3ã€ã¯ããã«ãããŸã-ããã¯å éããæ©èœãå®çŸ©ããAccelerateInterpolatorã§ãã ååãšããŠãç»é¢ããæ¶ããèŠçŽ ã«äœ¿çšããå¿
èŠããããŸãã é»è²ã®ããŒã«ãèŠããšãç»é¢ããé£ã³åºããŸãã
ãªãé床ãåäžããæ©èœãããã®ã§ããïŒ ãã®ãããã»ãšãã©ã®å Žåããã®èŠçŽ ã¯åçŽã«ç»é¢ã«è²»ãããããŠãŒã¶ãŒã¯æ£ç¢ºã«æ°ä»ããŸããã ããšãã°ãæ¬ èœããŠããèŠçŽ ã«å¯ŸããŠDecelerateInterpolatorã䜿çšããå Žåãéã«é床ãäžãããšããŠãŒã¶ãŒã¯ããã«æ°ä»ããªãããšãããããŸãã
ãããã£ãŠãç»é¢ã«è¡šç€ºãããèŠçŽ ã«ã¯DecelerateInterpolatorïŒéãããŒã«ïŒã䜿çšããå¿
èŠããããŸãã ãŸããAccelerateDecelerateInterpolatorã¯ãé床ãæåã«å¢å ããããã«å¿ããŠæžå°ããé¢æ°ãå®çŸ©ããŸãã ãã¥ãŒã«é¢é£ä»ããããŠããã¢ãã¡ãŒã·ã§ã³ã«äœ¿çšããå¿
èŠããããŸããããã¯ãç»é¢äžã§åã«å€åãããµã€ãºãŸãã¯äœçœ®ãå€æŽããç»é¢äžã«æ®ããŸãã
ãŸããAndroid 5ã«ã¯ãæ¢ã«æ€èšãããã®ãšãŸã£ããåããããªææ°ã®è£éåšããããŸãã 圌ãã¯ããã¹ã ãŒãºãã€èªç¶ã«åäœãããšèããããŠããŸãã 確ãã«ããããã¯å°ãèŠæ ãããããã¡ãªã¿ã«ãAndroid 5以éã§ã¯äœ¿çšã§ããŸããããµããŒãã©ã€ãã©ãªã«ååšããŸããã€ãŸããã©ã®ããŒãžã§ã³ã§ã䜿çšã§ããŸãã ãããŠãçŸåšã®ãããžã§ã¯ãã§ã¯ããããã®è£éåšãæãŸããããã§ãã
ã³ãŒãã«æ»ããŸãããã ãã®èšå€§ãªã³ãŒãã®ãã³ãã«ã§ã¯ãååã¯äœæããªãã£ãããšãå€æããŸãããããŸã ååãªè£éåšããããŸããã§ããã
TypeEvaluatorsã«ã€ããŠã¯ãååãšããŠãéåžžã¯ããã€ãã®åçŽãªå€ãã¢ãã¡ãŒã·ã§ã³åããããæŽæ°ãŸãã¯å®æ°ã®ããããã®æ°å€ã§ãããè£éåšãèšå®ããå¿
èŠããªããããæåã§èšå®ããå¿
èŠã¯ã»ãšãã©ãããŸãããããã¯ãã¹ãŠèªèããŠããŸãã ãã ããããã§ããã«ã¹ã¿ã ãã¥ãŒã®ã¬ã³ããªã³ã°ãPointãRectãªã©ã®è€éãªãªããžã§ã¯ãã«äŸåããå Žåããããã®å€ãã¢ãã¡ãŒã·ã§ã³åããããã«ã·ã¹ãã ã§äºåå®çŸ©ãããPointFEvaluatorãŸãã¯RectEvaluatorã䜿çšããããšãã§ããŸãã
ãŸããã«ã¹ã¿ã TypeEvaluatorã䜿çšããŠãããªããã£ãã®äžéšã®éå
žåçãªå€æŽãè¡ãããšãã§ããŸãã ããšãã°ãè²ãã¢ãã¡ãŒã·ã§ã³åããå Žåã
è²ãäœã§ãããèŠããŠãããŸãããã ããã¯éåžžã®æŽæ°ã§ãåãã£ã³ãã«ã«ã¢ã«ãã¡ãèµ€ãç·ãéã®2è²ãèšå®ããŸãã éåžžã®intã®ããã«ã¢ãã¡ãŒã·ã§ã³åãããšãããè²ããå¥ã®è²ãžã®çŸããé·ç§»ã§ã¯ãªããä¿¡å·æ©ãŸãã¯äœããã®è¹ãåŸãããŸãã
ãŸããç¬èªã®TypeEvaluatorsãäœæããããšãã§ããŸããããã«å¹²æžããããšã¯ã§ããŸããã
ArgbEvaluatorãªã©ãå
žåçãªTypeEvaluatorã®å®è£
äŸãèŠãŠã¿ãŸãããã ããã¯ã·ã¹ãã ã«ååšãããããå®è£
ããå¿
èŠã¯ãããŸããããåªããå®äŸãšããŠåœ¹ç«ã¡ãŸãã
TypeEvaluatorã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ãšããã§ãã Evaluateã¡ãœããã¯1ã€ãããããŸãããåæ°ã¯ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããŸã-ããã¯è£éãããã¢ãã¡ãŒã·ã§ã³æéã§ãã éå§å€ãšçµäºå€ã®äž¡æ¹ã
äœãããå¿
èŠããããŸããïŒ éå§å€ãšçµäºå€ããåãã£ãã«ã®è²ãååŸããå¿
èŠããããŸãã ããã¯æåããè¡ããŸããããã¯æ±ºåããã§ãã
ãããŠã0ãã1ãŸã§ã®å€ãæã€åæ°ã«åºã¥ããŠãã¢ãã¡ãŒã·ã§ã³ã®çŸåšã®å€ã§è²ãã©ã®ããã«èŠãããã®å€ãèŠã€ããŸãã ãããèšç®æ¹æ³ã§ãã
ObjectAnimatorã«ç§»ããŸãããã ãããŠãããã§ãã®è³ªåãããããšãã§ããŸãïŒValueAnimatorãã¯ã©ã€ã¢ã³ãéçºã§ã»ãšãã©äœ¿çšãããŠããªããšèšã£ãã®ã«ããªãValueAnimatorãã©ã®ããã«æ©èœããããèæ
®ããã®ã§ããïŒ ã¯ããObjectAnimatorã¯ValueAnimatorã®çŽæ¥ã®æ¡åŒµæ©èœã§ãããValueAnimatorã«ã€ããŠç§ãèšã£ãããšã¯ãã¹ãŠãObjectAnimatorã«ã€ããŠã¯çå®ã§ãããã ããUpdateListenerã䜿çšããå¿
èŠã¯ãããŸããã 代ããã«ãObjectAnimatorã¯ãã¢ãã¡ãŒã·ã§ã³äžã«ããçš®ã®å¯å€ãã©ã¡ãŒã¿ãŒãã«ãã»ã«åããããããã£ã®æ°ããæŠå¿µãå°å
¥ããŸãã ãããäœã§ããããç解ããŸãã
ã³ãŒããããäžåºŠèŠãŠã¿ãŸããããCrossFadeãObjectAnimatorsã§ã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã ããã«AnimatorSetãä¿åããŸããããObjectAnimatorsã¯å
éšã«è¡šç€ºãããŸãã ãããŠãObjectAnimatorãã©ã®ãã©ã¡ãŒã¿ãŒã§äœæãããã¹ãããèŠãŠã¿ãŸãããã ã¢ãã¡ãŒã·ã§ã³åããããªããžã§ã¯ãã¯æåã®ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããããããã£ïŒã¢ãã¡ãŒã·ã§ã³åããå¿
èŠããããŸãïŒã¯2çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããŸãã ããã«å€æŽå¯èœãªå€ã
ã¢ãã¡ãŒã·ã§ã³ã®ç¶ç¶æéãå
¥åããããšãæ®ã£ãŠããŸãã
ãããŠ-åããªã¹ããŒãããããã¯äœãåŸãããªãã®ã§ããã¹ãŠã®ã³ãŒããèšãã¿ãŸãã
次ã«ãããããã£ãå
éšã§ã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã ããããã£ã¢ã«ãã¡ã¯ã·ã¹ãã å
ã«ãããããæåã§å®è£
ããå¿
èŠã¯ãããŸãããããããäœã§ãããäžè¬çã«äœãå«ãŸããŠããããå®å
šã«èŠãããšãã§ããŸãã
ã芧ã®ãšãããPropertyã®å Žåãæ£ããæ©èœããããã«2ã€ã®ã¡ãœãããåå®çŸ©ããå¿
èŠããããŸãã ãããã£ãŠãsetValueã¡ãœããã¯ãtypeevaluatorãèšç®ããæ°ããå€ããã¹ãŠèšå®ããæ¹æ³ã瀺ããŸãã ãããã£ãŠããããã¯ã¢ãã¡ãŒã·ã§ã³åããããªããžã§ã¯ãã«èšå®ãããŸãã Getã¡ãœããã¯ãã¢ãã¡ãŒã¿ãŒããã®ããããã£ã®ã¢ãã¡ãŒã·ã§ã³ã®çŸåšã®å€ãç¥ãå¿
èŠãããå Žåã§ãã Getã¡ãœããã¯ãã¢ãã¡ãŒã¿ãã¢ãã¡ãŒã·ã§ã³ã®åæå€ãååŸããå Žåã«äœ¿çšã§ããŸãã
ããã§ãValueAnimatorãObjectAnimatorãšã©ã®ããã«ç°ãªãããå€æããŸãããã
ValueAnimatorã®çµæãšããŠåŸãããå€ã¯ãAnimatorã§èšå®ãããUpdateListenerã«æž¡ããããšãã§ã«èããŠããŸãã APIãåããObjectAnimatorã ãã§ããã軜æžãããPropertyã䜿çšããŠå¿
èŠãªå€ããã¹ãŠèšå®ãããŸãã
çŽ æŽãããããã©ã¹ããã-ã³ãŒããå°ãªãã
ããã§ã¯ãããããã£ããŒã¿ãã©ã®ããã«èšå®ããããèŠãŠã¿ãŸãããã
ãŸããã³ãŒãã®äŸã®ããã«ãããããã£ç¶æ¿ã䜿çšããŸãã ãã ãããããæååã§èšå®ããããšãã§ããŸãã ããšãã°ãã¢ãã¡ãŒã·ã§ã³åãããããããã£ãšããŠã¢ã«ãã¡æååãèšå®ãããŠããå Žåãã¢ãã¡ãŒã·ã§ã³äžã«ã¢ãã¡ãŒã¿ãŒã¯setAlphaãgetAlphaãªã©ã®ã¡ãœãããViewãªããžã§ã¯ãã«èšå®ãããããšãæåŸ
ããŸãã ãã®ãããªã¡ãœããããªããžã§ã¯ãã«ããããååšããªãå Žåãã¯ã©ãã·ã¥ããŸãã
ãŸããç·ã䜿çšããŠãã¥ãŒã®äžéšãã¢ãã¡ãŒãããå ŽåãReflectionã䜿çšããŠãã¥ãŒã«å
¥ãããšãç解ããããšã䟡å€ããããŸããããã«ãããã¢ãã¡ãŒã·ã§ã³ããã»ã¹ã§ãªããžã§ã¯ããæäœããã³å€æŽããããã»ã¹ãããã«é
ããªããŸãã
ããã§ã¯ãããã©ã«ãã§ã·ã¹ãã ã«ãã§ã«ååšããããããã£ãèŠãŠã¿ãŸããããããã¯äœ¿çšã§ããŸãã ããã¯ã¢ã«ãã¡ïŒéæ床ïŒã§ãããããã¯ãç»é¢äžã®ãã¥ãŒã®äœçœ®ã«é¢é£ãããã©ã¡ãŒã¿ãŒã§ãããããã¯ãç»é¢ã®å転ãšã¹ã±ãŒãªã³ã°ã«é¢é£ãããã©ã¡ãŒã¿ãŒã§ãã ãããŠããã¡ãããèªåã§æ¬²ããããããã£ãäœæããããã䜿çšããŠãã¥ãŒãã¢ãã¡ãŒã·ã§ã³åããããšãã§ããŸãã
ã©ãã 次ã«ãViewPorpertyAnimatorããããValueAnimatorã«åºã¥ããŠæ©èœããŸãããã®äž»ãªå©ç¹ã¯ãããã€ãã®ãã¥ãŒãåçŽãªããããã£ã§ã¢ãã¡ãŒã·ã§ã³åããããã®éåžžã«äŸ¿å©ãªAPIãæäŸããããšã§ãã è€æ°ã®å€ãã¢ãã¡ãŒã·ã§ã³åããå ŽåãObjectAnimatorããããããã«é«éã§ãããããŸãã ããããããã«ã¯ãã€ãã¹ããããŸã-ã·ã³ãã«ãã ViewPorpertyAnimatorã䜿çšããŠã¢ãã¡ãŒã·ã§ã³åãããã«ã¹ã¿ã å±æ§ãäœæããããšã¯ã§ããŸããã æãåçŽã§åãã¢ã«ãã¡ãäœçœ®æ±ºããã¹ã±ãŒã«ãå転ã®ã¿ããããŸãã
ViewPorpertyAnimatorã䜿çšããŠãã¯ãã¹ãã§ãŒãã¡ãœãããã©ã®ããã«èŠããããèŠãŠã¿ãŸãããã ã¡ãªã¿ã«ãããã¯1ã€ã®ã¹ã©ã€ãã«å
¥ã£ãå¯äžã®ã¯ãã¹ãã§ãŒãã³ãŒãã§ããããã®ããã«é©ããŠããŸãã
ããã§ã¯ãã¹ãŠãæ確ã ãšæããŸãã ãã¥ãŒã§åŒã³åºãããAnimateã¡ãœããã¯ãViewPorpertyAnimatorãè¿ããŸãã 次ã«ãããã䞻匵ããAlphaã¡ãœãããåŒã³åºãããã®ãã¥ãŒã«å¿
èŠãªæçµå€ã衚瀺ããã¢ãã¡ãŒã·ã§ã³ã®ç¶ç¶æéã瀺ããè£éåšãæå®ããŸãã ãããŠãããã§å¥ã®withEndActionã¡ãœããã«æ³šç®ã§ããŸãããã®ã¡ãœããã¯ãã¢ãã¡ãŒã·ã§ã³ãå®äºããåŸã«å®è¡ããã¢ã¯ã·ã§ã³ã決å®ããŸãã
ãã®ããããã¥ãŒã®äžéšãã¢ãã¡ãŒã·ã§ã³åã§ããããªãå€æ°ã®æ¹æ³ãæ¢ã«æ€èšããŸããã ããããããã€ãã©ãã䜿ãã¹ããã決ããŸãããã
ViewAnimationãšDrawableAnimationã§ã¯ããã¹ãŠã倧ãŸãã«ç解ããå¿
èŠããããŸãã ViewAnimationã¯çµ¶å¯Ÿã«äœ¿çšããªãã§ãã ãããDrawableAnimationã¯ãä»ã®æ¹æ³ã䜿çšããŠå®éã«ã¢ãã¡ãŒã·ã§ã³ãäœæã§ããªãå Žåã«ã®ã¿ãéåžžã«è€éãªã±ãŒã¹ã«äœ¿çšããŸãã ãã¶ã€ããŒã«æ¬¡ã®ããã«äŒããŸããããããŠããã¬ãŒã ããšã®ã¢ãã¡ãŒã·ã§ã³ãç§ã«æµã蟌ãã ããšãã¶ã€ããŒã¯è©Šã¿ãããã䜿çšããŸãã ããããæãèå³æ·±ãã®ã¯è©³çŽ°ã«æ€èšããŸãã
ã¯ã©ã€ã¢ã³ãéçºã®ValueAnimatorã¯ãããããPropertyãèšè¿°ã§ããªãå Žåã«ã®ã¿äœ¿çšãã䟡å€ããããŸãã ããšãã°ãã¢ãã¡ãŒã·ã§ã³ãªããžã§ã¯ãã«ã¯ã²ãã¿ãŒããªãããPropertyãæžã蟌ãããšã¯ã§ããŸããããåŒã³åºãããªãããšã¯ç¢ºãã§ãããåæå€ããæçµå€ãŸã§ã¢ãã¡ãŒã·ã§ã³åããå®çŸ©ããã®ã«ååã§ãDateListenerãããã³ã¢ãã¡ãŒã·ã§ã³äžã«åãåã£ãæ°ããå€ãæž¡ããŸãã 次ã«ãValueAnimatorã䜿çšã§ããŸãã
ä»ã®ãã¹ãŠã®å Žåãããã³éåžžã«è€éãŸãã¯è€éãªã¢ãã¡ãŒã·ã§ã³ã®å Žåãã¢ãã¡ãŒã·ã§ã³åãããããããã£ãŸãã¯ã¢ãã¡ãŒã·ã§ã³åããããªããžã§ã¯ããå€æ°ããå ŽåãObjectAnimatorã䜿çšããå¿
èŠããããŸãã ãã®å Žåãã»ãšãã©ã®å Žåãè€éãªã¢ãã¡ãŒã·ã§ã³ã®å Žåã¯ãAnimatorSetå
ã§äœ¿çšããŸãã
ãŸããããã€ãã®å®å
šã«ã·ã³ãã«ãªã¢ãã¡ãŒã·ã§ã³ã«ã¯ãViewPropertyAnimatorã䜿çšã§ããŸãã
äºå®ããæ©ãã¢ãã¡ãŒã·ã§ã³ãå®æãããå¿
èŠãããç¶æ³ã¯ã©ãã§ããïŒ
å€ãã®å Žåãåå¿è
ã«ã¯ãã®ãšã©ãŒãçºçããŸãã ViewPropertyAnimatorã䜿çšããŠããçš®ã®ã¢ãã¡ãŒã·ã§ã³ãéå§ãããã£ã³ã»ã«ããå Žåã¯clearAnimationã¡ãœãããåŒã³åºããŸãã clearAnimationã¯ViewAnimationã䜿çšããŠèšå®ããã¢ãã¡ãŒã·ã§ã³ã®ãã£ã³ã»ã«ã®ã¿ãåç
§ããããããã®ã¡ãœããã¯æ©èœããŸããããŸããViewAnimationã䜿çšããªãããšã«åæããã®ã§ã圹ã«ç«ããªãã§ãããã
ViewPropertyAnimatorã䜿çšããŠã¢ãã¡ãŒã·ã§ã³ãéå§ããå Žåã¯ããã£ã³ã»ã«ããå¿
èŠããããŸãã ãŸããæåã«ãã¥ãŒã§Animateã¡ãœãããåŒã³åºããŠãããcancelã¡ãœãããåŒã³åºããŸãã
ValueãŸãã¯ObjectAnimatorã®äœ¿çšãéå§ããã¢ãã¡ãŒã·ã§ã³ããã£ã³ã»ã«ããå Žåã¯ãããããžã®ãªã³ã¯ãä¿åããé©åãªã¿ã€ãã³ã°ã§ãã£ã³ã»ã«ãåŒã³åºãå¿
èŠããããŸãã
çŸåšçºçããŠããçŸåšã®ã¢ãã¡ãŒã·ã§ã³ããã£ã³ã»ã«ããå¿
èŠãããã®ã¯ãã€ã§ããïŒ ãŸãããŠãŒã¶ãŒã¯äœããã®ã¢ã¯ã·ã§ã³ãéããŠãã¢ãã¡ãŒã·ã§ã³ãéå§ããçŸåšã®ã¢ã¯ã·ã§ã³ããã£ã³ã»ã«ããŠããããšãç¥ãããŸãã ãã®åŸãå
ã«æ»ãããšãã§ãããã¥ãŒãåæç¶æ
ã«æ»ããŸãã ããããå¥ã®ç¶æ³ããããŸãã
ããšãã°ããŠãŒã¶ãŒããã®ã¢ã¯ãã£ããã£ããã¹ãŠéããŠãã®ç»é¢ãçµäºããAnimatorãåŒãç¶ãæ©èœããå Žåã¯ãåã«ã³ã³ããã¹ãããªãŒã¯ããããšããããŸãããããã¯åžžã«ããŸãè¯ããããŸããã ãããã£ãŠãä»åã¯ä¹è»ã®ããã«æããŠããValueãŸãã¯ObjectAnimatorãžã®ãªã³ã¯ãç¶æããããšãéèŠã§ããããªããåæºãããå¿
èŠããããŸããã»ãšãã©åžžã«Animatorãžã®ãªã³ã¯ãç¶æããå¿
èŠããããŸãããã¥ãŒã«ã€ããŠè©±ããŠããå Žåã¯ãçŸåšã®ã¢ãã¡ãŒã·ã§ã³ããã£ã³ã»ã«ããå¿
èŠããããŸãã
view , Measure/Layout, view . , . - , Android 16 2/3 , ? , , layout pass, Measure Layout, , , . , , Measure Layout, , , , . , , , , , .
, , . , Measure Layout â , , , .
? . view ObjectAnimators, Top Bottom, , set Top Bottom , . , , , Layout, , , , , , , .
. , Measure Layout â , - , , . , â Measure/Layout, â , - . , - , , , Measure/Layout. - , . , .
, LayoutTransition, animateLayoutChanges, . ValueAnimator. ? LayoutTransition - ViewGroup, childs ViewGroup, , , . LayoutTransition , , .
LayoutTransition, - , , , LinearLayout, animateLayoutChanges, true, , , , , . . , . layout , LayoutTransition - .
, . . , . - , -, , , -, , .
. ?
LayoutTransition, , LayoutTransition Changing. , childs layout, LayoutTransition, , . LinearLayout, LinearLayouts . , LinearLayouts, , .
, , , . , , , . , layout, , ? LayoutTransition LinearLayout .
. ?
. , - . . - , - . , . , . ? ãããç解ããŸãããã
LayoutTransition - , , childs, , LayoutTransition, , , . , , â setAnimateParentHierarchy, true.
, LinearLayout, , , , .
LinearLayouts, , AnimateParentHierarchy true, view LayoutTransition, , . , , LayoutTransition, , delay, , setAnimateParentHierarchy false, .
. layout. - , .
, LayoutTransition . Appearing Disappearing â view .
Changeappearing Changedisappearing â transitions, . parent childs parent.
Changing, , view.
, , LayoutTransition , - . , , ViewGroup LayoutTransition, , . â .
. , : , view, . . , ImageView , .
, view . , , , , . , view, , view, .
Android -, - , , Transition Framework.
Transition Framework , LayoutTransition. , , Transition, , , . childs, . , LayoutTransition . . Transition Framework . , Android 4.4. transitions Android. Android 5.
, , .
, view, , .
? TransitionSet, transition. ChangeBounds â Transition, layout, layout .
Fade, Fade.
TransitionSet â AnimatorSet, Transition.
beginDelayedTransition, Transition. , , , , Transition, , . , .
, , . LayoutTransition ViewGroup, .
, BeginDelayedTransition, view, layout, .
transitions ? . ChangeBounds Fade . Android 5 , . , - Transition, , .
, Transition â , , . , . , Transition , .
â Slide. , Fade, - . , -, view , - , , . Transition Slide.
, , , . . Slide, TransitionChangeBounds.
Transition, Explode. , - . , , - . , Explode, , , , . API.
ChangeTransform â Transition, view.
ImageView. Transition, ChangeImageTransform. , preview- SkillType ImageView, , , , Transition ImageView.
ChangeImageTransform, ImageView ChangeBounds.
, , , , . , , excludeTarget, ID, , . ID, true.
, , . , , , , , - , ID, view. - , : «, - , , view», excludeTarget, false. ID, view. excludeTarget, excludeChildren.
â , view , , : , view root. addTarget, Transition, view .
ID, view. -, - , removeTarget.
Transition Framework , Transitions, internet- XML. , , Transition. TransitionInflater Java- XML Transition. Transition.
Transition Framework . , layout.
? XML view ID, , Transition Framework , view , . go, layout .
ID - , TransitionName, , , Android 5, Transition Framework view, ID.
Transition Framework Android. , , Support Library, . Fade ChangeBounds Android 4.4, 4.0 4.3. . . , , , , , , , , , , Overview Support Library. , , , , , , .
, - layout : LayoutTransition Transition Framework? LayoutTransition , , - , , , 4.0, . Transition Framework, , , - Android.
, . , , , - , , , . , , , , - .
, . , , , , , . , , , .
, . , - , . view . rocket science . , , , ValueAnimator.
ValueAnimator, ? , , , , , , . , . - , .
Android , Dynamic animation, Physic-based animation. , , , .
, , , , FlingAnimation SpringAnimation. FlingAnimation , - , , , , , . SpringAnimation â - .
, , Dynamic animation .
, , , ValueAnimator ObjectAnimator. , , .
Dynamic animation .
: « ? ?». ãã¹ãŠãéåžžã«ç°¡åã§ãã , , . .
Dynamic animation . â , .
FlingAnimation «», , . SpringAnimation , , , , , . «».
, , .
, , FlingAnimation. ããïŒ , . . ãããïŒ
, .
, , touch-. , view, Listener RecyclerView, onTouchListener ( , ), RecyclerView Listener, .
velocityTracker â Android, , â , , , , ActionUp, ActionCancel, - view , , , . velocityTracker, computeCurrentvelocity, FlingAnimation, , velocityTracker, , , view , , .
EndListener â , .
, , , onStop.
, , - , Start.
, view? view, - . , , view .
, Dynamic animation.
, Fling. , SpringAnimation, view . , .
, , , , .
, . ( GitHub: bit.ly/2uQPiSY .)
FlingAnimation EndListener , , , , SpringAnimation, SpringForce, , , , , .
, , , , , , - Dynamic Animation.
Dynamic animation. FlingAnimation , , , SpringAnimation, , , - .
, - .
, â , , . . : « ?», , - .
-, , , Transition Framework, ObjectAnimation, ViewPropertyAnimator, Dynamic animation.
, : Android 4.3 . , . . - - . , . .
ãããŠæåŸã®1ã€ã , . , . Developer Settings, . , 5x â , . â , , - .
, , - , Android. ItemAnimator, RecyclerView. . ItemAnimator â , , .
ItemAnimator, , , DefaultItemAnimator, RecyclerView. .
AnimatedVectorDrawable, . Android, compatibility- Support Library. - , Android 4, . StackOverflow , AnimatedVectorDrawableCompat .
Activity Fragment Transition â activity . Transition Framework, API .
, . . , . .
: , Telegram