Android TextView跑马灯,仿澎湃新闻

import android.content.Context;

import android.graphics.Canvas;

import android.util.AttributeSet;

public class TextMarqueeViewextends androidx.appcompat.widget.AppCompatTextView {

    public boolean mIsFloating =false; //是否开始滚动

    private float mSpeed =0.5f;

    private float mStep =0f;

    private String mStr =""; //文本内容

    private float mTextLength =0f; //文本长度

    private float mY =0f; //文字的纵坐标

    public TextMarqueeView(Context context) {

          super(context);

    }

    public TextMarqueeView(Context context, AttributeSet attrs) {

          super(context, attrs);

    }

    public TextMarqueeView(Context context, AttributeSet attrs, int defStyle) {

          super(context, attrs, defStyle);

    }

    public void init(String str, float speed) {

        setText(str);

        mSpeed = speed;

        mStr = getText().toString();

        mTextLength = getPaint().measureText(mStr);

        mY = getTextSize() + getPaddingTop();

        getPaint().setColor(0xff0000ff);

    }

    @Override

    public void onDraw(Canvas canvas) {

        canvas.drawText(mStr, 0, mStr.length(),  0 -mStep, mY, getPaint());

        if (!mIsFloating)

              return;

        if(mStep ==0){

              mStep +=mSpeed;

              postInvalidateDelayed(2000);

        }else if(mStep >mTextLength - getMeasuredWidth()){

              mStep =0;

              postInvalidateDelayed(2000);

        }else {

              mStep +=mSpeed;

              invalidate();

        }

}

    public void startFloating() {

        mIsFloating =true;

        invalidate();

    }

    public void stopFloating() {

        mIsFloating =false;

        invalidate();

    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容