什么是Ticker?
Ticker是一个显示滚动文字的UI控件。你可以想象一下里程表切换到下一个数字时是如何滚动的,Ticker所做的事情就与之类似。Ticker处理了字符切换与数字增长(比如从9999到10000的动画)的动画。
你可以通过定义一个有序的字符数组来指定如何呈现动画。Ticker中每个字符的显示都是通过这个数组来控制,它规定了如何从一个开始字符过渡到目标字符。比如,如果你只使用一个基本的ASCII字符列表,那么当要实现A到Z的时候,实际是A->B->...Z。字符的顺序不能倒过来,所以当动画要从Z到A的时候,其实是‘Z’ -> ‘Y’ -> … -> ‘A’。
让我们重温一下上面的需求并谈谈时如何实现它们的。
高性能低内存
我们决定继承最基本的View类,所有的效果都直接在canvas上绘制出来。这样做的好处是高度灵活,对内存分配完全可控,而且使用本地的绘制操作可以最大程度减小对性能的影响。我们尽可能的预先分配和计算好每一个transition,这样在绘制路径的时候唯一要做的就是绘制操作了。
API易插入,简单可扩展的API
不管是通过XML还是代码,Ticker都很易定义和使用,支持自定义(当前支持自定义文字颜色和大小,插值器,以及动画时间)。目前公开的api还非常有限,随着新需求的出现,我们将尽力公开更多的方法和自定义渠道。
使用方法:
build.gradle中compile 'com.robinhood.ticker:ticker:1.0.1'
布局文件中直接使用:
<com.robinhood.ticker.TickerView
android:id="@+id/tickerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
代码:
public class MainActivity extends AppCompatActivity {
private TickerView tickerView;
private static final char[] NUMBER_LIST = TickerUtils.getDefaultNumberList();
private float index=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tickerView = (TickerView) findViewById(R.id.tickerView);
tickerView.setCharacterList(TickerUtils.getDefaultNumberList());
tickerView.setTextColor(R.color.colorPrimary);
tickerView.setTextSize(100);
tickerView.setAnimationDuration(500);
tickerView.setAnimationInterpolator(new OvershootInterpolator());
tickerView.setGravity(Gravity.START);
handler.postDelayed(runnable, 1000); //每隔1s执行
}
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
index++;
tickerView.setText("$"+index);
handler.postDelayed(this, 1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}
效果图: