如何监听跑马灯,跑完一圈?
思路很清楚,跑马灯会一直draw,但会发现文本跑完一圈后没停一下子,那监听draw的间隔不就行了?代码贴上:
使用:
tv.setOnMarqueeCompleteListener(new AutoText.OnMarqueeCompleteListener() {
@Override
public void onMarqueeComplete() {
}
});
自定义TextView:import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.TextView;
public class AutoText extends TextView {
private OnMarqueeCompleteListener marqueeCompleteListener;
private long mTime = 0;
private long longs = 0;
public AutoText(Context context) {
this(context, null);
}
public AutoText(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AutoText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
// 开始监听
public void setOnMarqueeCompleteListener(OnMarqueeCompleteListener marqueeCompleteListener) {
this.marqueeCompleteListener = marqueeCompleteListener;
// 避免一些机子反应慢,postDelayed一下
postDelayed(new Runnable() {
@Override
public void run() {
mTime = -1;
longs = -1;
}
}, 3000);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mTime == -1) {
mTime = System.currentTimeMillis();
} else if (longs == -1) {
long time = System.currentTimeMillis();
longs = time - mTime;
mTime = time;
} else if (longs != 0) {
long time = System.currentTimeMillis();
long thisLong = time - mTime;
mTime = time;
if (thisLong > 10 * longs) {
if (null != marqueeCompleteListener) {
LogUtil.i("AutoText", "MarqueeCompleteListener onMarqueeComplete");
marqueeCompleteListener.onMarqueeComplete();
}
}
}
}
public interface OnMarqueeCompleteListener {
void onMarqueeComplete();
}
}
实现跑马灯
xml里实现:
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:lines="1"
android:marqueeRepeatLimit="marquee_forever"
代码实现:
tvMarquee.setEllipsize(TextUtils.TruncateAt.MARQUEE);
tvMarquee.setSingleLine(true);
tvMarquee.setSelected(true);
tvMarquee.setFocusable(true);
tvMarquee.setFocusableInTouchMode(true);