TextView都有跑马灯的效果,如果说让你去监听跑马灯效果的执行,我觉得这个需求有点二了,但是也要实现。

思路:
1.自定义View  继承TextView   这种方法过于麻烦,只是监听一个跑马灯而已。
2.自定义SPan。简单好用,扩展TextView的功能。

关键代码如下:

@Override
public void draw(Canvas canvas, CharSequence text, int start, int end,
float x, int top, int y, int bottom, Paint paint) {
canvas.save();
canvas.drawText( text.toString(), x - startX, y, paint);
canvas.restore();
int measureText = (int) paint.measureText(text, 0, text.length());
if (valueAnimator == null ) {
initAnimator(measureText - mView.getWidth());
}
}
private int startX = 0 ;
private final static int DEFULT_DURATION = 2000 ;
private int duration = DEFULT_DURATION ;
@Override
public int getSize(Paint paint, CharSequence text, int start, int end,
FontMetricsInt fm) {
return 40;
}
private void initAnimator(int width ){
valueAnimator = ValueAnimator.ofInt(0, width , 0 );
valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
startX = (Integer) animation.getAnimatedValue() ;
mView.invalidate();
}
});
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.setDuration(duration);
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationRepeat(Animator animation) {
if (mEasySpanListener != null ) {
mEasySpanListener.over();
}
}
});
valueAnimator.setRepeatCount(Integer.MAX_VALUE);
valueAnimator.start();
}
 

Span本身就是对TextView的一个功能增强。
使用:
 String text = "这个是用来测试的,TextView的跑马灯效果,想要监听他的跑完的事件用的。" ;
        SpannableString spannableString = new SpannableString(text);
        EasySpan easySpan  =new EasySpan(MainActivity.this,test);
        easySpan.setDuration(10000);
        easySpan.setEasySpanListener(new EasySpanListener() {
            @Override
            public void over() {
                Log.i("Test", "over") ;
            }
        });
        spannableString.setSpan(easySpan, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        test.setText(spannableString);
来源: <https://github.com/flyme2012/EasyListenerSpan/blob/master/src/com/example/easylistenerspan/MainActivity.java>
 
 

很简单的小功能,大家就看代码吧。
 
源码下载地址:   https://github.com/flyme2012/EasyListenerSpan   
 

最新文章

  1. angularjs和ajax的结合使用 (二)
  2. 用户管理-------userManage
  3. delphi FMX 数字下拉滑动
  4. 数据库---MySQL常用函数总结
  5. js 和 c# 方法互调
  6. 学习IT资源分享,欢迎各位知道的学习IT资源前来分享
  7. Fedora 12 环境搭建
  8. 淘宝Refrash_token签名错误的解决办法
  9. 关于C++对汉字拼音的处理(3)
  10. codeforces --- 279C Ladder
  11. 跪求 EF缓存问题 也不知道是不是缓存 问题
  12. ZOJ3574(归并排序求逆数对)
  13. 他们主动布局(autolayout)环境的图像编辑器
  14. 绑定枚举到dropdownlist
  15. [SOJ] 商人的宣传
  16. install webapp2 on Linux outside google app engine.
  17. SQLServer之创建提交读
  18. 解决Xftp连接不上Linux虚拟机问题。
  19. ambari安装调研
  20. 启动设置mongodb

热门文章

  1. [原创]Java静态代码检查工具介绍
  2. ZPL打印中文信息
  3. GO語言視頻教程
  4. IOS 7 UI 的适配
  5. @Html.DropDownList 设置选中值无效
  6. Android学习笔记----Activity的生命周期图示
  7. INSTALL MYSQL IN MAC
  8. [原] JsTree.js
  9. Rxlifecycle(一):使用
  10. [原]unity5 AssetBundle打包