Android自定义之TextView跑马灯的监听
2024-08-26 06:24:40
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>
最新文章
- angularjs和ajax的结合使用 (二)
- 用户管理-------userManage
- delphi FMX 数字下拉滑动
- 数据库---MySQL常用函数总结
- js 和 c# 方法互调
- 学习IT资源分享,欢迎各位知道的学习IT资源前来分享
- Fedora 12 环境搭建
- 淘宝Refrash_token签名错误的解决办法
- 关于C++对汉字拼音的处理(3)
- codeforces --- 279C Ladder
- 跪求 EF缓存问题 也不知道是不是缓存 问题
- ZOJ3574(归并排序求逆数对)
- 他们主动布局(autolayout)环境的图像编辑器
- 绑定枚举到dropdownlist
- [SOJ] 商人的宣传
- install webapp2 on Linux outside google app engine.
- SQLServer之创建提交读
- 解决Xftp连接不上Linux虚拟机问题。
- ambari安装调研
- 启动设置mongodb