Android自己定义之TextView跑马灯的监听
2024-08-28 04:11:22
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);
最新文章
- Codeforces Round #383 (Div. 2) D 分组背包
- Fiddler捕获 iPhone/Android 流量
- 仿QQ侧滑菜单<;大自然的搬运工-代码不是我的>;
- (copy) How to remote desktop a Fedora 19 from a Windows 7
- Apache CXF实现Web Service(1)——不借助重量级Web容器和Spring实现一个纯的JAX-WS web service
- ArcGIS AO开发高亮显示某些要素
- Oracle常用几种Sql用法
- POJ 3228Gold Transportation(二分+最大流)
- WOJ 1055
- hdu5384(trie树)
- PHP就业前景好不好一看便知,转行选择需谨慎!
- Java爬取网络博客文章
- 深度学习模型融合stacking
- Apache- DBUtils框架学习
- Python爬虫项目--爬取自如网房源信息
- python---RabbitMQ(5)消息RPC(远程过程调用)
- python并发编程之multiprocessing进程(二)
- 008Maven_建立私服
- CXPACKET等待事件
- 如何让pycharm以py.test方式运行