炸裂的Adjuster
Adjuster被设计用来在SuperTextView的绘制过程中插入一些操作。这具有异常重要的意义。比如,默认实现的DefaultAdjuster可以或许犊飕的调剂文字的大年夜小。当然,你可以用它来实现各类各样的效不雅。
想要Adjuster生效,你必须调用SuperTextView.setAutoAdjust(true)来启用Adjuster功能。当然,你可以所以便利的停止,经由过程调用SuperTextView.setAutoAdjust(false)。并且,你须要留意调用次序,因为一旦调用了SuperTextView.setAutoAdjust(true),而Adjuster没有被设置的话,将会启用默认的DefaultAdjuster(它可以或许犊飕的调剂文字大年夜小),直到你设置了你本身的Adjuster
高效的状况图
干涉控件的绘制
实现一个Adjuster须要持续SuperTextView.Adjuster,并且实现adjust(SuperTextView v, Canvas canvas)办法。Adjuster.adjust()会在每次绘制过程中被调用,这意味着你可以或许弗成思议的大年夜外部干涉控件的绘制过程。
- public class YourAdjuster extends SuperTextView.Adjuster {
- @Override
- protected void adjust(SuperTextView v, Canvas canvas) {
- //do your business。
- }
- }
留意,如不雅开启动画,你必须十分谨慎的编写adjuster()中的代码。因为动画会以60帧/每秒的速度进行绘制。这意味着,这个办法每秒会被调用60次!所以,切切不要在这个办法中反复的创建对象,会卡爆的!原因是短时光的大年夜量将会引起【内存抖动】,导致GC频繁产生。相干常识你可以看看我的┞封两篇文┞仿:
- 【Android内存基本——内存颤抖http://www.jianshu.com/p/69e6f894c698】
- 【用两张图告诉你,为什么你的App会卡顿?http://www.jianshu.com/p/df4d5ec779c8】
响应触摸事宜
如不雅你重载Adjuster的onTouch(SuperTextView v, MotionEvent event)办法,你将可以或许获得SuperTextView的触摸事宜。这是重要的一点,如不雅你想持续的对SuperTextView的触摸事宜进行处理,你必须使onTouch()返回true。不然你只能接收到一个ACTION_DOWN事宜,而不是一个事宜流。
- public class YourAdjuster extends SuperTextView.Adjuster {
- @Override
- protected void adjust(SuperTextView v, Canvas canvas) {
- //do your business。
- }
- @Override
- public boolean onTouch(SuperTextView v, MotionEvent event) {
- //you can get the touch event.
- //If want to get a series of touch event, you must return true here.
- }
- }
如斯惊艳的效不雅
得益于SuperTextView内置的动画驱动,你可以或许结合Adjuster来实现难以置信的动画效不雅。一切只须要在你合理的编写好Adjuster后,调用startAnim()和stopAnim()来启动/停止动画。
如你所见,膳绫擎的效不雅就是经由过程Adjuster来实现的。并且这种拔插式的设计,使得你可以或许随时在同一个SuperTextView上应用新的Adjuster,你所有须要做的工作就是创建一个新的Adjuster,然后调用setAdjuster()。
之前@Alex_Cin欲望看到Ripple涟漪效不雅,所以在RippleAdjuster.java中,我演示了若何应用Adjuster和动画驱动合营实现上图的Rippler涟漪效不雅。【RippleAdjuster.java链接:https://github.com/chenBingX/SuperTextView/blob/master/app/src/main/java/com/coorchice/supertextview/SuperTextView/Adjuster/RippleAdjuster.java】
看,你可以应用Adjuster实现本身的Ripple效不雅。
指定Adjuster的层级
Adjuster贴心的设计了控制造用层级的功能。你可以经由过程Adjuster.setOpportunity(Opportunity opportunity)来指定Adjuster的绘制层级。
在SuperTextView中,绘制层级被大年夜下到上分为:背景层、Drawable层、文字层3个层级。经由过程Opportunity来指定你的Adjuster想冲要入到那个层级间。