小视频源码,可控的跑马灯,无需焦点

简介: 小视频源码,可控的跑马灯,无需焦点

小视频源码,可控的跑马灯,无需焦点实现的相关代码

package com.android.view;

import android.content.Context;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.text.Layout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.TextView;

public class MarqueeTextView extends TextView {
    /** 是否停止滚动 */
    private boolean mStopMarquee;
    private String mText;//文本内容
    private float mCoordinateX = 1280;//当前滚动位置
    private float mTextWidth;//文本宽度
    private int mScrollWidth = 1280;//滚动区域宽度
    private int speed = 1;//滚动速度
    private float currentPosition = 0.0f;
    public float getCurrentPosition() {
        return mCoordinateX;
    }

    public boolean ismStopMarquee() {
        return mStopMarquee;
    }

    public void setmStopMarquee(boolean mStopMarquee) {
        this.mStopMarquee = mStopMarquee;
    }

    public void setCurrentPosition(float mCoordinateX) {
        this.mCoordinateX = mCoordinateX;
    }

    public int getScrollWidth() {
        return mScrollWidth;
    }

    public void setScrollWidth(int mScrollWidth) {
        this.mScrollWidth = mScrollWidth;
        currentPosition = mScrollWidth;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public MarqueeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setText(String text) {
        this.mText = text;
        mTextWidth = getPaint().measureText(mText);
        //mTextWidth = 1280;
        if (mHandler.hasMessages(0))
            mHandler.removeMessages(0);
        mHandler.sendEmptyMessageDelayed(0, 10);
    }

    @Override
    protected void onAttachedToWindow() {
        //mStopMarquee = false;
        if (!isEmpty(mText))
            mHandler.sendEmptyMessageDelayed(0, 500);
        super.onAttachedToWindow();
    }

    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

    @Override
    protected void onDetachedFromWindow() {
        //mStopMarquee = true;
        if (mHandler.hasMessages(0))
            mHandler.removeMessages(0);
        super.onDetachedFromWindow();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        TextPaint paint = getPaint();
        int width = (int) Layout.getDesiredWidth(mText, 0,
                mText.length(), paint);
        if(width < getWidth()){
            canvas.drawText(mText, 10, 40, getPaint());
            return;
        }
        if (!isEmpty(mText)) {
            //System.err.println("zzx===>mCoordinateX: "+mCoordinateX);
            canvas.drawText(mText, mCoordinateX+10, 40, getPaint());
            currentPosition = width+mCoordinateX+200;
            canvas.drawText(mText, currentPosition, 40, getPaint());
        }
    }

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    if (mCoordinateX < (-mTextWidth)) {//文字滚动完了,从滚动区域的右边出来
                        mCoordinateX = currentPosition-10;
                        if (!mStopMarquee) {
                            sendEmptyMessageDelayed(0, 500);
                        }else{
                            mCoordinateX = 0;
                        }
                        invalidate();
                    } else {
                        mCoordinateX -= speed;
                        if (!mStopMarquee) {
                            sendEmptyMessageDelayed(0, 30);
                        }else{
                            mCoordinateX = 0;
                        }
                        invalidate();
                    }

                    break;
            }
            super.handleMessage(msg);
        }
    };

}

以上就是 小视频源码,可控的跑马灯,无需焦点实现的相关代码,更多内容欢迎关注之后的文章

目录
相关文章
|
25天前
【实用】一个移动端简单的UI弹窗组件,虽算不上高大上,但至少耐看
【实用】一个移动端简单的UI弹窗组件,虽算不上高大上,但至少耐看
|
3月前
|
缓存 小程序 数据可视化
【社区每周】小程序授权弹层和菜单支持长辈版、无障碍版;AMPE情景智能新增widget卡片能力(2022年6月第一期)
【社区每周】小程序授权弹层和菜单支持长辈版、无障碍版;AMPE情景智能新增widget卡片能力(2022年6月第一期)
19 0
|
5月前
|
开发工具 索引
点击一个消除游戏图标时,背后都发生了什么
点击一个消除游戏图标时,背后都发生了什么
32 1
|
9月前
|
弹性计算 前端开发 JavaScript
如此丝滑的按钮交互效果
如此丝滑的按钮交互效果
44 0
|
10月前
|
前端开发 定位技术 容器
百度地图高级开发:上滑推拉菜单CSS解决方案
百度地图高级开发:上滑推拉菜单CSS解决方案
50 0
|
JavaScript 开发者
ElUpload不好用?一文教你实现一个简易图片上传预览组件
ElUpload不好用?一文教你实现一个简易图片上传预览组件
359 0
|
XML API Android开发
酷炫的Activity切换动画,打造更好的用户体验
酷炫的Activity切换动画,打造更好的用户体验
酷炫的Activity切换动画,打造更好的用户体验
如何实现一个丝滑的点击水波效果
本文为Varlet组件库源码主题阅读系列第九篇,读完本篇,可以了解到如何使用一个`div`创建一个点击的水波效果。
73 0
|
前端开发
前端工作总结104-控制弹出框不全屏
前端工作总结104-控制弹出框不全屏
57 0
C++ 使得窗口置顶(终极方案)
C++ 使得窗口置顶(终极方案)
568 0