TEXTVIEW 不依赖焦点的滚动字幕

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xwdrhgr/article/details/102725633
import android.content.Context;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.TextView;


public class MarqueeText extends TextView {
     /** 是否停止滚动 */
    private boolean mStopMarquee;
    private String mText;
    private float mCoordinateX;
    private float mTextWidth;
    public MarqueeText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public void setText(String text) {
        this.mText = text;
        mTextWidth = getPaint().measureText(mText);
        if (mHandler.hasMessages(0))
            mHandler.removeMessages(0);
        if (mText.length() > 15) {
            mHandler.sendEmptyMessageDelayed(0, 2000);
        }else {
            invalidate();
        }
       
    }
    @Override
    protected void onAttachedToWindow() {
        mStopMarquee = false;
        if(mText == null || mText.length() <= 0){
            return;          
        }
        if (mText.length() > 15) {
             mHandler.sendEmptyMessageDelayed(0, 800);
        }
      
        super.onAttachedToWindow();
    }
    @Override
    protected void onDetachedFromWindow() {
        mStopMarquee = true;
        if (mHandler.hasMessages(0))
            mHandler.removeMessages(0);
        super.onDetachedFromWindow();
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(mText == null || mText.length() <= 0){
            return;  
        }
      //  if (mText.length() > 15) {
             canvas.drawText(mText, mCoordinateX, 40, getPaint());
    //    }
       
    }
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 0:
                if (Math.abs(mCoordinateX) > (mTextWidth + 100)) {
                    mCoordinateX = 0;
                    invalidate();
                    if (!mStopMarquee) {
                        sendEmptyMessageDelayed(0, 500);
                    }
                } else {
                    mCoordinateX -= 1;
                    invalidate();
                    if (!mStopMarquee) {
                        sendEmptyMessageDelayed(0, 30);
                    }
                }
                break;
            }
            super.handleMessage(msg);
        }
    };
}

猜你喜欢

转载自blog.csdn.net/xwdrhgr/article/details/102725633