CustomViewãä½ãã¨ãã®ãã³ãã¬ã¼ããAndroidåå¿è ãèãã
CustomViewãä½ãæ©ä¼ãå¤ãä»æ¥ãã®ãã。
ããã§èããã®ãAPIå¶éã ã£ãã、ããã©ã¼ãã³ã¹ã®äºã ã£ãããªãã§ã。
APIå¶éã¯ã©ããããããªããããã¹ããã¨ãã¦ï½¤ããã©ã¼ãã³ã¹ã¯åºæ¥ãã ã対ç、è¯ããã¦ããããã¨èãã¦ãã¾ã。
å¤çºããinvalidate();
ValueAnimatorãªã©ä½¿ã£ã¦ããã¨AnimatorUpdateListenerã®onAnimationUpdateã§invalidate();ããã®ã¾ã¾ãµã¯ãã¨æ¸ããã¿ã¼ã³ããããã¨æãã¾ã。
ãããªæãã«ï½¡
ValueAnimator animator = ValueAnimator.ofFloat(0.f, 1.f); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { invalidate(); } }); animator.setDuration(10000); animator.start();
ãã®æ、invalidateãå¼ã°ããééã¯å¤§ä½17msã§58FPSãããã«ãªã£ã¦ãã¾ã。
60FPSãããåºã¦ãå ´åã¯æ»ããã«æç»ãã¦ããã¨ããã¦ãã¾ãã、Viewã«ãã£ã¦ã¯ããã¾ã§ã®FPSãå¿
è¦ã¨ãã¦ããªãæãå¤ãã¨æãã¾ã。
ã¾ã、è¤éãªAnimationãããæ、ValueAnimatorã¯ä¸ã¤ã¨ã¯éããè¤æ°ä½¿ãã¾ã。
ãã®éãã¹ã¦ã®ValueAnimatorã§invalidateã17msééã§å¼ã¶ã¨ç¡é§ã«onDrawãå¼ã°ãæç»ãããªãè¨ç®ãèµ°ããã¨ã«ãªãã¾ã。
ã¤ã±ãªããã¨ã§ã。
ç»é¢ãéãã¦ãå¼ã°ããinvalidate();
Viewã®ã©ã¤ããµã¤ã¯ã«ã§ããonDetachedFromWindow()ãå¼ã°ãã¦ãValueAnimatorã«addUpdateListenerããAnimatorUpdateListenerã¯çãç¶ãã¦ãã¾ã。
onDetachedFromWindow()ãå¼ã°ããæã«ã¯onDrawã¯å¼ã°ããªãã®ã§ãã、AnimatorUpdateListenerã®onAnimationUpdateã§ãã¦ããå¦çã¯Durationã®é、å¼ã°ãç¶ãã¾ã。
RepeatãããããªAnimatorã§ã¯å¸¸ã«å¦çãèµ°ãç¶ãã¦ãã¾ãã¾ã。
ç¡é§ãªè¨ç®ã¯ããã©ã¼ãã³ã¹ãä¸ããè¦å ã«ãªãã®ã§ã©ãã«ãããã»ããããã§ã。
åãèããæå¼·ã®TemplateCustomView
åºæ¬çã«ã¯Overrideããinvalidateã®å¦çãã´ãã§ã´ãã§ãã¾ãã。
ä»åã¯æ«å®ã§30mséé以ä¸ã§ã®æ´æ°ããsuper.invalidate();ãå¼ã°ãªãããã«ãã¦ãã¾ã。
å人çãªä¸»è¦³ã§ãã、 30FPSãããã¢ã¬ã°éåæãæããªãã¨æãã¾ã。
ã¾ã、ä¸å¿onDetachedFromWindowãå¼ã°ããæã«ã¯å³å¹ã§returnãããããã«ãã¦ã»ãã®å°ãã ãããã©ã¼ãã³ã¹ã«è²¢ç®ããã。
onDetachedFromWindow()å
ã®å¦çã§ã¯Animatorã®Cancelå¦çãå¿
é ã§å
¥ããããã«ãã¦ãã¾ã。
è¤éãªæç»ã«ãªãã°ãªãã»ã©ï½¤onAnimationUpdateã§ããå¦çãéããªããã¨ãããã®ã§å¿
é ã¨è¨ãã¾ã。
ã¨ï½¤ã¾ãããããèãã¦æ¸ãã¦ã¯ã¿ããã§ãã、ãã®Viewãä¸çªé©ãã¦ãã®ã£ã¦ï½¤Handlerã§åããinvalidateã¨ã©ããã®Animatorããå¼ã°ããinvalidate、ãã®ä»ãªããé©å½ã«å¼ã°ããinvalidateãå¶å¾¡ããã¨ãã«å½¹ã«ç«ã¡ã¾ã。
ä¸ã¤ã ãã®Animatorã®invalidateã ã¨ï½¤30msåã®æç»ããªãã¨ãããåºã¦ãããããã®ã§ï½¤ViewCompat.postInvalidateOnAnimation(View)ã使ãã®ãè¯ããã¨ï½¡
ãã 、postInvalidateOnAnimation(View)ã®ããã ãã«support libraryå°å
¥ããã®ãå«ã ã¨ãã人ã¯ããå°ãããããèããã»ããããããªã£ã¦æãã¾ã。
ã²ã¨ã¤ã®Viewã®ããã©ã¼ãã³ã¹ã«ãã ããã¨
ä¸ã¤ã®Viewã表示ããã¦ããæéã¯ä¸ã¤ã®ç»é¢ã表示ããã¦ããæéããå§åçã«å°ãªãã§ã。
ãã®ãã、å°å
¥ããã¨ãã«ããã©ã¼ãã³ã¹ãè¦ããã¨ãå°ãªãã¨æãã¾ã。
ãã 、ãããããã使ã£ã¦ãããããããããªã、ã¨ããç¶æ³ã«åãã¦ä»èªåã®æã£ã¦ããç¥èã§æé«ã®Viewãä½ã£ã¦å
¬éãããã¨ã¯é常ã«ææ義ã ã¨æãã¾ã。
æå¾ã«
çµå± onDrawå
ã§ã¤ã³ã¹ã¿ã³ã¹ãä½æããªãã¨ãããã«å½ããåã®ãã¨ãããã°ç¢ºå®ã«ä¸å®ä»¥ä¸ã®ããã©ã¼ãã³ã¹ãæ
ä¿åºæ¥ã¨ããã¨æãã¾ã。
ããã§ããä¸æ©è¸ã¿è¾¼ãã ã¡ã³ããã³ã¹ããããã¨ã§ã¤ã±ã¡ã³ãªViewã¸ã¨æè¯ã§ãã¾ãã!!!!
ããã!!!!!!!!!