Android自定义之TextView跑马灯的监听

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 18:08:19

Android自定义之TextView跑马灯的监听的相关文章

Android TextView跑马灯效果

TextView跑马灯简单效果 <!--简单示例--> <TextView android:text="@string/longWord" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1" android:ellipsize="marquee&quo

Android自学笔记之 多个TextView跑马灯的实现

textView跑马灯实现: 1.定义textView标签的4个属性: android:singleLine="true"//使其只能单行 android:ellipsize="marquee"//去掉省略号 android:focusable = "true"//使其循环 android : focusableInTouchMode = "true" 这样一个TextVIew就实现了跑马灯效果了,但是如果再用相同的写法写第二

android在Gridview实现Textview跑马灯效果

默认是下面的属性添加TextView中: android:ellipsize="marquee" android:focusableInTouchMode="true" android:gravity="center" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLi

Android TextView跑马灯

1 <TextView 2 android:layout_width="fill_parent" 3 android:layout_height="wrap_content" 4 android:layout_margin="20dp" 5 android:ellipsize="marquee" 6 android:focusable="true" 7 android:focusableInTouch

Android TextView 跑马灯效果

文本跑马灯必须设置的几个文本属性: android:marqueeRepeatLimit="marquee_forever"     设置跑马灯的次数:永久            android:ellipsize="marquee" 跑马灯方式             android:focusable="true" 获取焦点            android:singleLine="true" 单行          

Third Day:正式编程第三天,学习实践内容TextView跑马灯、AutoCompleteTextView、multiAutoCompleteTextView以及ToggleButton、checkedBox、RadioButton等相关实践

2.针对Focused的TextView跑马灯(文字较多一行无法显示)效果 针对单个TextView的跑马灯效果,可直接在TextView控件参数中添加三个属性: android:singleLine="true"(一行显示会有省略号) android:ellipsize="marquee"(一行显示无省略号) android:focusable="true" android:focusableInTouchMode="true&quo

真正的TextView跑马灯

android自带的跑马灯是必须在有焦点的情况下才会滚动,一旦失去焦点跑马灯就会失去效果. 现在我的做法是自定义TextView 并重写isFocused和onFocusChanged方法,设置focused为true,这样TextView就可以始终获取到焦点 亲测可用! 1.自定义TextView: import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; im

TextView跑马灯

TextView跑马灯 textView跑马灯实现:1.定义textView标签的4个属性:android:singleLine="true"//使其只能单行android:ellipsize="marquee"//去掉省略号android:focusable = "true"//使其循环android : focusableInTouchMode = "true"2.自定义类继承TextView:实现三个构造函数:复写isf

Android USB大容量存储时SD卡状态监听(转)

对SD卡状态监听,到现在为止我知道的有两种方式: 1.注册StorageEventListener来监听sd卡状态 StorageEventListener中有onStorageStateChanged()方法,当sd卡状态改变时,此方法会调用,对各状态的判断一般会用到Environment类,此类中包含的有关sd卡状态的常量有: MEDIA_BAD_REMOVAL:表明SDCard 被卸载前己被移除 MEDIA_CHECKING:表明对象正在磁盘检查 MEDIA_MOUNTED:表明sd对象是