网上的很多的教程都是通过更改TextView的属性进行跑马灯的设计。这样做有很多的缺点:

1、如果TextView没有获取焦点,那么跑马灯的效果无法实现。

2、如果文本长度小于TextView的宽度,跑马灯的效果无法实现。

3、需要设置很多属性,麻烦。

还有很多教程是通过重写TextView的方式使TextView获得焦点,但是没有解决上面的几个问题。

本教程也是通过重写TextView的方式,准确的说是通过重写View的方式实现跑马灯。

使用到的技术:

1、Paint的使用;

2、Canvas中的drawText方法;

3、线程;

Paint:就是我们俗称的画笔,Android提供了很多的方法对Paint进行设置:

setAntiAlias: 设置画笔的锯齿效果。 setColor: 设置画笔颜色。 setARGB:  设置画笔的a,r,p,g值。 setAlpha:  设置Alpha值。 setTextSize: 设置字体尺寸。 setStyle:  设置画笔风格,空心或者实心。 setStrokeWidth: 设置空心的边框宽度。 getColor:  得到画笔的颜色。 getAlpha:  得到画笔的Alpha值。

Canvas:提供了如下的方法

Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布。

Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,则将内容都绘制在bitmap上,因此bitmap不得为null。

Canvas(GL gl): 在绘制3D效果时使用,与OpenGL相关。

drawColor: 设置Canvas的背景颜色。

setBitmap:  设置具体画布。

clipRect: 设置显示区域,即设置裁剪区。

isOpaque:检测是否支持透明。

rotate:  旋转画布

setViewport:  设置画布中显示窗口。

skew:  设置偏移量。

线程:这方面的资料很多。

以下是代码:

package net.songsoft.paomadeng;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Rect;

import android.widget.TextView;

/**

*

* CreateDate: 2014-3-25

* Copyright: Copyright(c)

* Company: songsoft

* @author 宋志辉

* @version V1.0.0

* @Description 跑马灯的实现类

*/

public class MarqueeTextView extends TextView implements Runnable {

private Paint m_paint;

private int width;

private String src;

/**

*

* @return src

* @Description 获取字符串

* 2014-3-26::宋志辉::创建此方法

*/

public String getSrc() {

return src;

}

/**

*

* @param src

* @Description 设置字符串

* 2014-3-26::宋志辉::创建此方法

*/

public void setSrc(String src) {

this.src = src;

}

/**

*

* @param context

* @Description 构造函数,对跑马灯的数据进行初始化

* 2014-3-25::宋志辉::创建此构造方法

*/

public MarqueeTextView(Context context) {

super(context);

width = 320;

m_paint = new Paint();

new Thread(this).start();

}

/**

*

* @param strText

* @return

* @Description 获取字符的宽度和高度

* 2014-3-25::宋志辉::创建此方法

*/

Rect GetStringRect(String strText) {

Rect rect = new Rect();

m_paint.getTextBounds(strText, 0, strText.length(), rect);

return rect;

}

/**

*

* @param canvas

* @param txtStr

* @Description 跑马灯的效果

* 2014-3-25::宋志辉::创建此方法

*/

void marquee(Canvas canvas, String txtStr) {

String txtStr2 = txtStr.substring(0, txtStr.length()) ;

Rect rect = GetStringRect(txtStr);

int len = txtStr.length();

while((width + rect.width() > 320) && (len > 0))

{

rect = GetStringRect(txtStr.substring(0, len));

len -= 1;

}

m_paint.setColor(Color.BLACK);

String txtLeft = txtStr.substring(len, txtStr.length());

if (!txtLeft.equals(""))

{

canvas.drawText(txtLeft, 20, 40, m_paint);

}

String txtRight = txtStr.substring(0, len);

if (!txtRight.equals(""))

{

canvas.drawText(txtRight, width, 40, m_paint);

}

if(width>20){

width-=1;

}else{

width=320;

}

}

/**

*

* @param canvas

* @see android.view.View#onDraw(android.graphics.Canvas)

* @Description 重绘

* 2014-3-25::宋志辉::创建此方法

*/

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

marquee(canvas, this.getSrc());

}

/**

*

* @see java.lang.Runnable#run()

* @Description 线程,刷新界面

* 2014-3-25::宋志辉::创建此方法

*/

@Override

public void run() {

// TODO Auto-generated method stub

while (!Thread.currentThread().isInterrupted()) {

try {

Thread.sleep(10);

} catch (Exception e) {

// TODO: handle exception

Thread.currentThread().interrupt();

}

postInvalidate();

}

}

}

android paint跑马灯,Android使用Canvas实现跑马灯相关推荐

  1. android 字体跑马灯,Android文字跑马灯功能的实现(自定义跑马灯控件)

    文字跑马灯效果这个功能挺常见的,网上也有很多的介绍,大多是说使用普通的TextView加上几条属性即可实现.不过我在使用时发现并不能实现滚动,可能是因为我的页面中使用到的布局及控件比较复杂,被别的控件 ...

  2. android上垂直跑马灯,android textview 垂直滚动and水平跑马灯

    垂直滚动的话就挺简单的.当然了不是自动的垂直滚动.如果是自动的垂直滚动的话还需要自定义.所以如果有需求需要textview 可以垂直滚动的话,那你来这里就对了. 直接贴 代码.就是这么任性. andr ...

  3. 【Android】自定义View、画布Canvas与画笔Paint

    安卓自定义View其实很简单.这个View可以像<[Android]利用Java代码布局,按钮添加点击事件>(点击打开链接)一样,利用Java代码生成一系列的组件.也可以配合画布Canva ...

  4. android布局跑马灯,androidTextView实现简单的跑马灯效果

    先看效果 下面是布局文件代码 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&quo ...

  5. android文字自动滚动,Android TextView文字横向自动滚动(跑马灯)

    TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" 2.设置可滚到,或显示样式:android:elli ...

  6. android:ellipsize = marquee 跑马灯,Android基于TextView属性android:ellipsize实现跑马灯效果的方法...

    本文实例讲述了Android基于TextView属性android:ellipsize实现跑马灯效果的方法.分享给大家供大家参考,具体如下: Android系统中TextView实现跑马灯效果,必须具 ...

  7. Android移动应用开发之TextView实现阴影跑马灯文字效果

    文章目录 前言 创建项目 配置文件简介 阴影走马灯文字 values/string.xml values/colors.xml layout/activity_main.xml 法2 main/jav ...

  8. android 图片跑马灯动画,ImageView 图片循环跑马灯的效果

    不解释了  直接上代码了 main.xml布局文件,记住必须用RelativeLayout将ImageView重叠 android:orientation="vertical" a ...

  9. android 文字滚动组件,Android textview 跑马灯文字滚动效果

    设置如下TextView控件文件的XML: android:id="@+id/textview" android:layout_width="match_parent&q ...

最新文章

  1. 80年代高考数学卷,共10套,有您做过的高考卷吗?
  2. 初试CSS(二):选择器
  3. Cypress 里的 ensureAttached 检测原理
  4. 注解默认继承_默认方法和多重继承
  5. “独裁者”Google:开发者别无他选!| 极客头条
  6. Linux启动服务详解
  7. python测试rabbitmq简易实例
  8. 本示例主要展示如何在XtraGrid网格控件(包含在DevExpress WinForms套包中)的主视图中指定HyperLinkEdit控件作为列编辑器...
  9. PCB绘图的基本要求和布线原则
  10. java queue GATK_GATK使用注意事项
  11. Bioventus在马来西亚上市DUROLANE(R),并选中Athrotech作为独家经销伙伴
  12. 云计算未来的5个发展趋势分析
  13. Excise_Oop_abstract Interface
  14. 【FastJson】使用FastJson将Json数组转换成字符串
  15. python判断回文数_python如何判断是不是回文数
  16. Linux 文本 sed 命令 碱基对 替换
  17. C++ define用法
  18. HTML常用标签、文本格式化标签:加粗、倾斜、删除线、下划线等
  19. 信阳师院计算机与信息技术学院,徐丽娟
  20. 单相桥式整流电容滤波及稳态时的波形分析

热门文章

  1. pdf压缩文件怎么压缩最小,pdf大小超过上传大小不能上传怎么压缩?
  2. android拍照保存到系统相册,调用系统相机拍照,并且保存到系统相册的一般套路...
  3. Flink窗口起始时间计算
  4. show和shown区别
  5. mysql主备集群(高可用)
  6. 计算机 工程领域的应用论文,计算机工程硕士论文
  7. 中科院计算所寒武纪团队DianNao系列论文导读
  8. 前端测试 -- sinon.js
  9. 将图片转换为icon字体图表
  10. 如何通过Oracle官网下载jdk历史版本