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;
    }
 
}

 

转载于:https://www.cnblogs.com/LiuSiyuan/p/3205103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值