Android文字跑马灯控件
作者:admin 日期:2010-02-14
先说声 大家新年快乐哈,明天就要进入2010年了,对我来说是很意义的一年,同时也是很重要的一年。新的气象,新的工作,新的挑战。保佑自己,相信自己!不啰嗦了,切入正题。
最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.TextView;
/** *//**
* 单行文本跑马灯控件
* @author tigertian
*
*/
public class AutoScrollTextView extends TextView implements OnClickListener {
private float textLength = 0f;//文本长度
private float viewWidth = 0f;
private float step = 0f;//文字的横坐标
private float y = 0f;//文字的纵坐标
private boolean isStarting = false;//是否开始滚动
private Paint paint = null;//绘图样式
private String text = "";//文本内容
public AutoScrollTextView(Context context) {
super(context);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
/** *//**
* 初始化控件
*/
private void initView()
{
setOnClickListener(this);
}
/** *//**
* 文本初始化,每次更改文本内容或者文本效果等之后都需要重新初始化一下
*/
public void init(WindowManager windowManager)
{
paint = getPaint();
text = getText().toString();
textLength = paint.measureText(text);
viewWidth = getWidth();
if(viewWidth == 0)
{
if(windowManager != null)
{
Display display = windowManager.getDefaultDisplay();
viewWidth = display.getWidth();
}
}
step = viewWidth;
y = getTextSize() + getPaddingTop();
}
/** *//**
* 开始滚动
*/
public void startScroll()
{
isStarting = true;
invalidate();
}
/** *//**
* 停止滚动
*/
public void stopScroll()
{
isStarting = false;
invalidate();
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawText(text, step, y, paint);
if(!isStarting)
{
return;
}
step -= 0.5;
if(step < -textLength)
step = viewWidth;
invalidate();
}
@Override
public void onClick(View v) {
if(isStarting)
stopScroll();
else
startScroll();
}
}
实现了宽度的判断,文本自动滚动及开始和停止滚动等功能。
在UI xml中的配置如下:
<cn.tigertian.ui.AutoScrollTextView android:id="@+id/TextViewNotice"
android:layout_height="30px" android:layout_width="fill_parent"
android:text="@string/test_notice_1" android:textColor="#000" android:inputType="text"
android:background="#EEE" android:textSize="20px"></cn.tigertian.ui.AutoScrollTextView>
在Activity中的使用方法如下:
//启动公告滚动条
autoScrollTextView = (AutoScrollTextView)findViewById(R.id.TextViewNotice);
autoScrollTextView.init(getWindowManager());
autoScrollTextView.startScroll();如果想改变跑马灯的文字内容或者文字效果,则在调用完setText方法之后,需要再调用一下init(WindowManager windowManager)方法,重新进行初始化和相关参数的计算。
最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下:
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.TextView;
/** *//**
* 单行文本跑马灯控件
* @author tigertian
*
*/
public class AutoScrollTextView extends TextView implements OnClickListener {
private float textLength = 0f;//文本长度
private float viewWidth = 0f;
private float step = 0f;//文字的横坐标
private float y = 0f;//文字的纵坐标
private boolean isStarting = false;//是否开始滚动
private Paint paint = null;//绘图样式
private String text = "";//文本内容
public AutoScrollTextView(Context context) {
super(context);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView();
}
/** *//**
* 初始化控件
*/
private void initView()
{
setOnClickListener(this);
}
/** *//**
* 文本初始化,每次更改文本内容或者文本效果等之后都需要重新初始化一下
*/
public void init(WindowManager windowManager)
{
paint = getPaint();
text = getText().toString();
textLength = paint.measureText(text);
viewWidth = getWidth();
if(viewWidth == 0)
{
if(windowManager != null)
{
Display display = windowManager.getDefaultDisplay();
viewWidth = display.getWidth();
}
}
step = viewWidth;
y = getTextSize() + getPaddingTop();
}
/** *//**
* 开始滚动
*/
public void startScroll()
{
isStarting = true;
invalidate();
}
/** *//**
* 停止滚动
*/
public void stopScroll()
{
isStarting = false;
invalidate();
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawText(text, step, y, paint);
if(!isStarting)
{
return;
}
step -= 0.5;
if(step < -textLength)
step = viewWidth;
invalidate();
}
@Override
public void onClick(View v) {
if(isStarting)
stopScroll();
else
startScroll();
}
}
实现了宽度的判断,文本自动滚动及开始和停止滚动等功能。
在UI xml中的配置如下:
<cn.tigertian.ui.AutoScrollTextView android:id="@+id/TextViewNotice"
android:layout_height="30px" android:layout_width="fill_parent"
android:text="@string/test_notice_1" android:textColor="#000" android:inputType="text"
android:background="#EEE" android:textSize="20px"></cn.tigertian.ui.AutoScrollTextView>
在Activity中的使用方法如下:
//启动公告滚动条
autoScrollTextView = (AutoScrollTextView)findViewById(R.id.TextViewNotice);
autoScrollTextView.init(getWindowManager());
autoScrollTextView.startScroll();如果想改变跑马灯的文字内容或者文字效果,则在调用完setText方法之后,需要再调用一下init(WindowManager windowManager)方法,重新进行初始化和相关参数的计算。
评论: 0 | 引用: 0 | 查看次数: 168
发表评论
上一篇
下一篇

文章来自:
Tags: 




