android TextView实现实现跑马灯效果,并监听滚动完成动作。
来源:互联网 发布:上海交通大学知乎 编辑:程序博客网 时间:2024/05/16 14:30
因项目需求,需要实现监听跑马灯效果滚动完成的动作,因此继承textview,添加监听滚动完成动作的监听器。
package com.example.textviewtest;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import android.view.ViewDebug.ExportedProperty;import android.widget.TextView;public class MarqueeTextView extends TextView implements Runnable {private static final int MARQUEE_DELAY = 1200;private static final int MARQUEE_RESTART_DELAY = 10;private int currentScrollX;private boolean isStop = false;private int textWidth;private boolean isMeasure = false;private int mMarqueeRepeatLimit = 1;private int mMarqueeVelocity = 2;private OnMarqueeCompleteListener marqueeCompleteListener;public MarqueeTextView(Context context) {this(context, null);}public MarqueeTextView(Context context, AttributeSet attrs) {this(context, attrs,0);}public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mMarqueeRepeatLimit = getMarqueeRepeatLimit();}interface OnMarqueeCompleteListener {void onMarqueeComplete();}public OnMarqueeCompleteListener getMarqueeCompleteListener() {return marqueeCompleteListener;}public void setOnMarqueeCompleteListener(OnMarqueeCompleteListener marqueeCompleteListener) {this.marqueeCompleteListener = marqueeCompleteListener;}/** * 获取文字滚动的速度,每秒移动的像素 * @return */public int getMarqueeVelocity() {return mMarqueeVelocity;}/** * 设置文字的滚动的速度 * @param mMarqueeVelocity 每秒移动的像素 */public void setMarqueeVelocity(int velocity) {this.mMarqueeVelocity = velocity ;}@Override@ExportedProperty(category = "focus")public boolean isFocused() {return false;}@Override@ExportedPropertypublic boolean isSelected() {return false;}@Overridepublic void setSelected(boolean selected) {super.setSelected(selected);startStopMarquee(selected);}@Overrideprotected void onFocusChanged(boolean focused, int direction,Rect previouslyFocusedRect) {super.onFocusChanged(focused, direction, previouslyFocusedRect);startStopMarquee(focused);}public void startStopMarquee(boolean bool){if(bool){startScroll();}else{stopScroll();}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (!isMeasure) {textWidth = getTextWidth();isMeasure = true;}}/** * 获取文字宽度 */private int getTextWidth() {Paint paint = this.getPaint();String str = this.getText().toString();return (int) paint.measureText(str);}@Overridepublic void run() {if(textWidth <= getWidth()){ if(null != marqueeCompleteListener){marqueeCompleteListener.onMarqueeComplete();}return; }if (isStop) {currentScrollX = 0;scrollTo(currentScrollX, 0);return;}currentScrollX += mMarqueeVelocity;scrollTo(currentScrollX, 0);if (textWidth != 0 && getScrollX() >= textWidth) {mMarqueeRepeatLimit--;if(mMarqueeRepeatLimit <= 0){if(null != marqueeCompleteListener){marqueeCompleteListener.onMarqueeComplete();}return;}currentScrollX = -getWidth();}postDelayed(this, MARQUEE_RESTART_DELAY);}/** * 开始滚动 */private void startScroll() {isStop = false;this.removeCallbacks(this);this.invalidate();currentScrollX = 0;postDelayed(this, MARQUEE_DELAY);}/** * 停止滚动 */private void stopScroll() {isStop = true;}/** * 从头开始滚动 */public void startFor0() {currentScrollX = 0;startScroll();}}
0 0
- android TextView实现实现跑马灯效果,并监听滚动完成动作。
- 一分钟实现 Android textview 跑马灯文字滚动效果
- Android TextView实现滚动跑马灯效果Marquee
- Android实现跑马灯Textview滚动效果的问题解决
- Android TextView跑马灯效果实现
- android textview跑马灯效果实现
- Android TextView实现跑马灯效果
- android TextView实现跑马灯效果
- android TextView实现跑马灯效果
- Android开发 TextView实现跑马灯效果
- android用TextView实现跑马灯效果
- Android TextView实现跑马灯效果
- Android TextView 跑马灯效果的实现
- android TextView实现跑马灯效果
- Android TextView实现跑马灯效果
- Android--TextView实现跑马灯效果
- Android开发:TextView实现跑马灯效果
- Android---14---TextView实现跑马灯效果
- LeetCode OJ算法题(十九):Remove Nth Node From End of List
- spring mvc 和 mybatis整合,简单的入门实例
- VB.NET利用正则表达式巧妙限制字符输入
- Eclipse debug ‘Source not found’
- JSP 定制标签
- android TextView实现实现跑马灯效果,并监听滚动完成动作。
- POJ 1094:Sorting It All Out:拓扑排序的较为繁琐的逻辑变形
- Key Task
- 数据结构 BFS遍历树
- 独立成分分析(Independent Component Analysis)
- (最大流) poj3436 ACM Computer Factory
- 怎么查别人qq登陆记录
- java的junit测试
- A计划