ScrollingTextView
ScrollingTextView 的代码:
1、文字向上滚动,类似电影结束后的字幕显示,这里不支持手势拖拽。
import android.content.Context; import android.util.AttributeSet; import android.view.animation.LinearInterpolator; import android.widget.Scroller; import android.widget.TextView; /** * A TextView that scrolls it contents across the screen, in a similar fashion as movie credits roll * across the theater screen. * * @author siyuan
* */ public class ScrollingTextView extends TextView implements Runnable { private static final float DEFAULT_SPEED = 15.0f; private Scroller scroller; private float speed = DEFAULT_SPEED; private boolean continuousScrolling = true; public ScrollingTextView(Context context) { super(context); setup(context); } public ScrollingTextView(Context context, AttributeSet attributes) { super(context, attributes); setup(context); } private void setup(Context context) { scroller = new Scroller(context, new LinearInterpolator()); setScroller(scroller); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); if (scroller.isFinished()) { scroll(); } } private void scroll() { int viewHeight = getHeight(); int visibleHeight = viewHeight - getPaddingBottom() - getPaddingTop(); int lineHeight = getLineHeight(); int offset = -1 * visibleHeight; int distance = visibleHeight + getLineCount() * lineHeight; int duration = (int) (distance * speed); scroller.startScroll(0, offset, 0, distance, duration); if (continuousScrolling) { post(this); } } @Override public void run() { if (scroller.isFinished()) { scroll(); } else { post(this); } } public void setSpeed(float speed) { this.speed = speed; } public float getSpeed() { return speed; } public void setContinuousScrolling(boolean continuousScrolling) { this.continuousScrolling = continuousScrolling; } public boolean isContinuousScrolling() { return continuousScrolling; } }
2、重写TextView,实现不需要焦点即可运行的跑马灯
import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.widget.TextView; /** * *@Description Auto-Scrolling Marquee *@Author siyuan */ public class ScrollingTextView extends TextView { public ScrollingTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ScrollingTextView(Context context, AttributeSet attrs) { super(context, attrs); } public ScrollingTextView(Context context) { super(context); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { if(focused) super.onFocusChanged(focused, direction, previouslyFocusedRect); } @Override public void onWindowFocusChanged(boolean focused) { if(focused) super.onWindowFocusChanged(focused); } @Override public boolean isFocused() { return true; } }