ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

小视频app源码自定义跑马灯,可控制速度与方向

2021-09-17 14:37:02  阅读:185  来源: 互联网

标签:currentScrollX 自定义 void 跑马灯 源码 mySpeed android public myContext


小视频app源码自定义跑马灯,可控制速度与方向的相关代码

主要是通过继承自TextView实现自定义View,使用drawText方法不断重绘文字。

XML布局:

 

<com.ycq.myview.MarqueeText
    android:id="@+id/test"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="#339320"
    android:maxLines="1"
    android:textColor="#FF00FF"
    android:textSize="21sp"/>

 

注意:需要设置为1行。可在XML中设置颜色,字号,不要设置文字内容。

Activity调用:

 

test = (MarqueeText) this.findViewById(R.id.test);
test.setMyContext("11111112225555");
test.setL2r(true);
test.setMySpeed(10);
test.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View view) {        start();    }});
setL2r设置方向,默认为从左向右;
setMySpeed设置速度,默认为5,说明:若速度设置<0,则默认为1,若>15,则默认15.
@Override
protected void onPause() {
    super.onPause();
    stop();
}
@Override
protected void onResume() {
    super.onResume();
    start();
}
@Override
protected void onDestroy() {
    super.onDestroy();
    stop();
}
public void start() {
    test.startScroll();
}
public void stop() {
    test.stopScroll();
}

 

销毁Activity,则不在执行。

具体实现:

 

package com.ycq.myview;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.TextView;
/**
 * Created by yi on 2017/2/6.
 */
public class MarqueeText extends TextView implements Runnable {
    private int currentScrollX = 0;// 当前滚动的位置
    private boolean isStop = false;
    private int textWidth;
    private boolean isMeasure = false;
    private String myContext = "";
    private int vWidth;
    private int mySpeed = 5;
    private Boolean l2r = true;
    //getPaint()获取系统画笔
    public MarqueeText(Context context) {
        super(context);
    }
    public MarqueeText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public MarqueeText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (!isMeasure) {// 文字宽度只需获取一次就可以了
            textWidth = (int) getPaint().measureText(myContext);
            vWidth = getWidth();
            isMeasure = true;
        }
        float baseline = getHeight() / 2 + getPaint().getTextSize() / 2 - getPaint().getFontMetrics().descent;
        canvas.drawText(myContext, currentScrollX, baseline, getPaint());
    }
    @Override
    public void run() {
        if (!l2r) {//向左运动
            currentScrollX -= mySpeed;// 滚动速度
            if (currentScrollX < 0) {
                if (Math.abs(currentScrollX) >= textWidth) {
                    currentScrollX = vWidth;
                }
            }
        }
        if (l2r) {//由左向右运动
            currentScrollX += mySpeed;// 滚动速度
            if (currentScrollX >= vWidth) {
                currentScrollX = -textWidth;
            }
        }
        invalidate();
        postDelayed(this, 5);
        if (isStop) {
            return;
        }
    }
    // 开始滚动
    public void startScroll() {
        isStop = false;
        this.removeCallbacks(this);
        post(this);
    }
    // 停止滚动
    public void stopScroll() {
        isStop = true;
    }
    public String getMyContext() {
        return myContext;
    }
    public void setMyContext(String myContext) {
        this.myContext = myContext;
        textWidth = (int) getPaint().measureText(myContext);
    }
    public int getMySpeed() {
        return mySpeed;
    }
    public void setMySpeed(int mySpeed) {
        this.mySpeed = mySpeed;
        if (mySpeed <= 0) {
            this.mySpeed = 1;
        }
        if (mySpeed >= 15) {
            this.mySpeed = 15;
        }
    }
    public Boolean getL2r() {
        return l2r;
    }
    public void setL2r(Boolean l2r) {
        this.l2r = l2r;
    }
}
float baseline = getHeight() / 2 + getPaint().getTextSize() / 2 - getPaint().getFontMetrics().descent;
        canvas.drawText(myContext, currentScrollX, baseline, getPaint());

 

 

保证绘制的文字在控件的竖直中线位置。

以上就是 小视频app源码自定义跑马灯,可控制速度与方向的相关代码,更多内容欢迎关注之后的文章

 

标签:currentScrollX,自定义,void,跑马灯,源码,mySpeed,android,public,myContext
来源: https://www.cnblogs.com/yunbaomengnan/p/15304476.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有