【Android】Android开发可以手动进行控制的跑马灯效果,包括从左到右,以及从右到左,
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193  
新浪微博:http://weibo.com/mcxiaobing  
首先给大家看一下我们今天这个最终实现的效果图:  
 
这个主要是用到的自定义TextView,然后里面开一个线程进行,进行滚动效果。 
我这里写了两个自定义TextView,分别是从左到右,以及从右到左。利用滚动 
的偏移量,进行设置滚动的位置。然后利用一个变量,进行区分是否是滚动状态。 
我这里给大家看一下代码吧,只给大家看一下其中一个自定义View的。
package davidmarqueecontrolproject.qq986945193.davidmarqueecontrolproject;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;
/**
 * @author :程序员小冰
 * @新浪微博 :http://weibo.com/mcxiaobing
 * @GitHub: https://github.com/QQ986945193
 * @CSDN博客: http://blog.csdn.net/qq_21376985
 * @码云OsChina :http://git.oschina.net/MCXIAOBING
 * <p/>
 * 从左到右 滚动自定义TextView
 */
public class AutoText extends TextView implements Runnable {
    private int currentScrollX;// 当前滚动的位置
    private boolean isStop = false;
    private int textWidth;
    private boolean isMeasure = false;
    public AutoText(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    public AutoText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public AutoText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        if (!isMeasure) {// 文字宽度只需获取一次就可以了
            getTextWidth();
            isMeasure = true;
        }
    }
    /**
     * 获取文字宽度
     */
    private void getTextWidth() {
        Paint paint = this.getPaint();
        String str = this.getText().toString();
        textWidth = (int) paint.measureText(str);
    }
    // 重写setText 在setText的时候重新计算text的宽度
    @Override
    public void setText(CharSequence text, BufferType type) {
        // TODO Auto-generated method stub
        super.setText(text, type);
        this.isMeasure = false;
    }
    @Override
    public void run() {
        currentScrollX -= 2;// 滚动速度
        scrollTo(currentScrollX, 0);
        if (isStop) {
            return;
        }
        if (getScrollX() <= -(this.getWidth())) {
            scrollTo(textWidth, 0);
            currentScrollX = textWidth;
            // return;
        }
        postDelayed(this, 5);
    }
    // 开始滚动
    public void startScroll() {
        isStop = false;
        this.removeCallbacks(this);
        post(this);
    }
    // 停止滚动
    public void stopScroll() {
        isStop = true;
        // textWidth=currentScrollX; //随时停止
    }
    // 从头开始滚动
    public void startFor0() {
        currentScrollX = 0;
        startScroll();
    }
}
布局我就不写了,直接引用这个view就行了。然后java类中看一下吧,其实 
也是直接调用它的方法。
package davidmarqueecontrolproject.qq986945193.davidmarqueecontrolproject;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import davidmarqueecontrolproject.qq986945193.davidmarqueecontrolproject.MarqueeText;
import davidmarqueecontrolproject.qq986945193.davidmarqueecontrolproject.R;
/**
 * @author :程序员小冰
 * @新浪微博 :http://weibo.com/mcxiaobing
 * @GitHub: https://github.com/QQ986945193
 * @CSDN博客: http://blog.csdn.net/qq_21376985
 * @码云OsChina :http://git.oschina.net/MCXIAOBING
 */
public class MainActivity extends Activity {
    private MarqueeText test;
    private AutoText auto_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        test = (MarqueeText) findViewById(R.id.test);
        auto_text = (AutoText) findViewById(R.id.auto_text);
    }
    public void start(View v) {
        test.startScroll();
//      auto_text.startScroll();
    }
    public void stop(View v) {
        test.stopScroll();
//      auto_text.stopScroll();
    }
    public void startFor0(View v) {
        test.startFor0();
//      auto_text.startFor0();
    }
}
好了。到此结束吧,不懂得请留言或者私信。源代码需要的可以去  
(AndroidStudio版)github下载地址:  
https://github.com/QQ986945193/DavidMarqueeControlProject
【Android】Android开发可以手动进行控制的跑马灯效果,包括从左到右,以及从右到左,的更多相关文章
- Android界面(1)    使用TextView实现跑马灯效果
		方法一:(只能实现单个TextView的跑马灯效果)在TextView添加以下控件 android:singleLine="true"只能单行,超出的文字显示为"...& ... 
- Android开发:文本控件详解——TextView(二)文字跑马灯效果实现
		一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ... 
- Android 开发笔记___textvieww__跑马灯效果
		<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ... 
- android中实现跑马灯效果以及AutoCompleteTestView与MultiAutoCompleteTextView的学习
		跑马灯效果 1.用过属性的方式实现跑马灯效果 属性: android:singleLine="true" 这个属性是设置TextView文本中文字 ... 
- Android 使用TextView实现跑马灯效果
		前言 我们在开发中经常会遇到一个小问题.比如下面一个小例子: 这个文字太长,单行中导致无法全部显示出来,这就是今天要实现的功能. 当然,百度中也有很多这种解决方案. 其中有一种,例如: <Tex ... 
- TextView: android:ellipsize="marquee" 跑马灯效果无效的问题
		今天练习的时候想实现一个文字的跑马灯效果,本来想自己手动实现的,不过突然想起来android里的TextView属性似乎自带了这个效果,叫: android:ellipsize ,平时都是把它的属性值 ... 
- Android 实现多行文本跑马灯效果
		Android TextView 实现跑马灯的效果很简单,只要加三个属性就可以了. android:ellipsize="marquee" android:focusable=&q ... 
- android:ellipsize实现跑马灯效果总结(转)
		最近无意间看到了涉及到跑马灯效果的代码,于是在网上查阅了很多资料,在这里对自己看的一些文章进行一下总结,顺便加上自己的一些体会. 让我们一步步逐渐向下. 首先我们要实现走马灯这样一个效果,通常来说 ... 
- Android学习总结——TextView跑马灯效果
		Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须 ... 
随机推荐
- java -jar .jar中没有主清单属性
			pom里加上 <build> <plugins> <plugin> <groupId>org.springframework.boot</grou ... 
- Android JNI之静态注册
			这篇说静态注册,所谓静态注册,就是native的方法是直接通过方法名的规定格式和Java端的声明处代码对应起来的,其对应规则如下: JNIEXPORT <返回值> JNICALL Java ... 
- 安装Hive 使用beeline 链接 出现 User: AAA is not allowed to impersonate BBB
			AAA 指的是 hdfs 文件系统的用户 BBB 是hive 设置的 hiveserver2 配置文件中的登陆用户名 在hadoop 配置如下 <property> <name> ... 
- Android布局——单复选框(今天上课的内容总结下)
			怎么感觉最近补充的都是监听器的内容,今天学长提了一个新的监听器,看起来很牛批(因为很长) // 添加文本更改的监听器, TextWatcher是监听器的回调接口 text.addTextChanged ... 
- Qt 中十六进制字节流转换为Base64编码
			在Qt中,在网络通信时,有时需要将16进制字节流转换为Base64编码传输,在Qt的QByteArray类中,提供了与Base64转换的接口: //16进制字节流转为Base64 QByteArray ... 
- 嵌入式linux简介
			嵌入式linux系统应用非常广泛,涵盖各行各业,基于ARM.mips等微处理器架构的硬件平台.基于嵌入式linux系统的设备已经深入生活中各个角落,随处可见. 我们常说的嵌入式linux系统,其实 ... 
- 趣讲 PowerJob 超强大的调度层,开始表演真正的技术了
			本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 写在前面的碎碎念:终于到了万众期待的调度层原理了. ... 
- canvas小画板——(2)荧光笔效果
			我们在上一篇文章中讲了如何绘制平滑曲线 canvas小画板——(1)平滑曲线. 透明度实现荧光笔 现在我们需要加另外一种画笔效果,带透明度的荧光笔.那可能会觉得绘制画笔的时候加上透明度就可以了.我们来 ... 
- BN系列-未完待续
			BN.LN.IN.GN Cross-Iteration Batch Normalization 因为有时候我们的计算能力有限,所以BN设置的比较小,这样BN效果就比较差. 因此我们将最近几次的batc ... 
- java循环嵌套与跳转语句(break,continue)
			一 循环嵌套 嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构.while.do…while. for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套f ... 
