`

[转]Android文字跑马灯控件

阅读更多

  import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Parcel;
import android.os.Parcelable;
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;

/**
 * 
 * TODO 单行文本跑马灯控件
 *
 * 
@author tianlu
 * 
@version 1.0
 * Create At : 2010-2-16 下午09:35:03
 
*/

public class AutoScrollTextView extends TextView implements OnClickListener {
    
public final static String TAG = AutoScrollTextView.class.getSimpleName();
    
    
private float textLength = 0f;//文本长度
    private float viewWidth = 0f;
    
private float step = 0f;//文字的横坐标
    private float y = 0f;//文字的纵坐标
    private float temp_view_plus_text_length = 0.0f;//用于计算的临时变量
    private float temp_view_plus_two_text_length = 0.0f;//用于计算的临时变量
    public 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 
= textLength;
        temp_view_plus_text_length 
= viewWidth + textLength;
        temp_view_plus_two_text_length 
= viewWidth + textLength * 2;
        y 
= getTextSize() + getPaddingTop();
    }

    
    @Override
    
public Parcelable onSaveInstanceState()
    
{
        Parcelable superState 
= super.onSaveInstanceState();
        SavedState ss 
= new SavedState(superState);
        
        ss.step 
= step;
        ss.isStarting 
= isStarting;
        
        
return ss;
        
    }

    
    @Override
    
public void onRestoreInstanceState(Parcelable state)
    
{
        
if (!(state instanceof SavedState)) {
            
super.onRestoreInstanceState(state);
            
return;
        }

        SavedState ss 
= (SavedState)state;
        
super.onRestoreInstanceState(ss.getSuperState());
        
        step 
= ss.step;
        isStarting 
= ss.isStarting;

    }

    
    
public static class SavedState extends BaseSavedState {
        
public boolean isStarting = false;
        
public float step = 0.0f;
        SavedState(Parcelable superState) 
{
            
super(superState);
        }


        @Override
        
public void writeToParcel(Parcel out, int flags) {
            
super.writeToParcel(out, flags);
            out.writeBooleanArray(
new boolean[]{isStarting});
            out.writeFloat(step);
        }



        
public static final Parcelable.Creator<SavedState> CREATOR
                
= new Parcelable.Creator<SavedState>() {
            
            
public SavedState[] newArray(int size) {
                
return new SavedState[size];
            }


            @Override
            
public SavedState createFromParcel(Parcel in) {
                
return new SavedState(in);
            }

        }
;

        
private SavedState(Parcel in) {
            
super(in);
            
boolean[] b = null;
            in.readBooleanArray(b);
            
if(b != null && b.length > 0)
                isStarting 
= b[0];
            step 
= in.readFloat();
        }

    }


    
/**
     * 开始滚动
     
*/

    
public void startScroll()
    
{
        isStarting 
= true;
        invalidate();
    }

    
    
/**
     * 停止滚动
     
*/

    
public void stopScroll()
    
{
        isStarting 
= false;
        invalidate();
    }

    

    @Override
    
public void onDraw(Canvas canvas) {
        canvas.drawText(text, temp_view_plus_text_length 
- step, y, paint);
        
if(!isStarting)
        
{
            
return;
        }

        step 
+= 0.5;
        
if(step > temp_view_plus_two_text_length)
            step 
= textLength;
        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)方法,重新进行初始化和相关参数的计算。

分享到:
评论

相关推荐

    安卓跑马灯相关-Android文字跑马灯控件文本自动滚动控件左右移动.rar

    总之,实现Android文字跑马灯控件涉及到TextView的属性设置、自定义View、动画系统以及事件处理等多个方面。开发者需要对Android的UI编程有扎实的理解,并且具备一定的调试技巧,才能根据提供的资源进行有效的学习和...

    Android文字跑马灯效果

    在Android开发中,"文字跑马灯效果"是一种常见的用户界面设计,主要用于显示较长的文本内容,当空间有限时,可以实现文本的自动循环滚动,给人一种动态的效果,类似传统电子显示屏上的跑马灯。这种效果通常用在通知...

    android跑马灯效果,失去焦点也可以实现

    标题提到的"android跑马灯效果,失去焦点也可以实现"意味着即使控件没有获取到焦点,仍然可以保持滚动效果。这在设计用户界面时特别有用,因为有时候我们希望信息能够持续吸引用户的注意力,而不仅仅是当用户交互时...

    android TextView跑马灯

    "TextView跑马灯" 是指在TextView中实现滚动文字的效果,类似于传统电子显示屏中的跑马灯效果,使得过长的文字能够在有限的空间内循环滚动显示。这种效果在通知栏提示、广告展示或者界面空间有限的情况下特别有用。 ...

    Android 文字跑马灯文字水平自动滚动控件及效果演示.rar

    Android 文字跑马灯文字水平自动滚动控件及效果演示,文字左右移动特效,文字滚动速度可调、文本颜色也可以自定义,可以用手触屏来控制是否停止文字滚动,控制点击停止或者继续运行,在开始滚动前,对文字样式做以下...

    Android代码-一个Android文字轮播控件,实现了可垂直跑、可水平跑的跑马灯。

    Android文字轮播控件 现在的绝大数APP特别是类似淘宝京东等这些大型APP都有文字轮播界面,实现循环轮播多个广告词等功能;这种控件俗称“跑马灯”,而TextBannerView已经实现了可垂直跑、可水平跑的跑马灯了。 效果...

    android自定义横向跑马灯TextView(两种,即使一个字符也能跑马灯)

    "android自定义横向跑马灯TextView"就是一个典型的示例,它允许文字在一个视图内不断滚动,模拟LED显示屏上的跑马灯效果。这种效果通常用于显示通知、提示信息或者标题,即使只有一个字符也能实现滚动。 跑马灯效果...

    Android 实现水平、垂直方向文字跑马灯效果demo

    在Android开发中,实现文字跑马灯效果是一种常见的动态UI设计,可以吸引用户注意力并提供信息展示。本示例——"Android 实现水平、垂直方向文字跑马灯效果demo",将详细介绍如何在Android应用中创建这样的效果。跑马...

    android TextView 跑马灯效果

    "跑马灯"效果,又称为滚动文字效果,是指当TextView中的文本长度超过控件宽度时,文本会从右向左自动循环滚动,就像跑马灯一样。这个效果在很多场景下都非常实用,比如通知栏消息、应用标题或者广告横幅等。 实现...

    android 跑马灯效果

    在Android开发中,跑马灯效果通常是指TextView的滚动效果,这种效果常见于电视广告、信息提示等场景,能够在一个固定的空间内展示超出长度的文字。本文将深入探讨如何在Android应用中实现跑马灯效果,并结合提供的...

    Android自动文本滚动控件(跑马灯)

    在Android开发中,有时我们需要创建一种特殊的文本显示效果,即文本自动滚动,也常被称为“跑马灯”效果。这种效果通常用于展示长文本,在有限的屏幕空间内循环滚动显示,常见于应用通知、广告栏或者标题栏。本文将...

    带动画可选中的单行文本跑马灯控件

    总结来说,这个"带动画可选中的单行文本跑马灯控件"是一个结合了Android属性动画和自定义视图技术的组件,它允许开发者创建具有独特跑马灯效果的文本展示,同时还能实现部分文本的高亮显示。通过深入研究其源码,...

    android listview跑马灯

    在Android开发中,"android listview跑马灯"是指在ListView控件中实现类似滚动广告或文字滚动的效果,通常称为跑马灯效果。这种效果可以让列表中的内容持续滚动,增加视觉吸引力,常用于展示新闻标题、广告轮播或...

    Androd自定义View实现竖直跑马灯效果

    本示例着重讲解如何实现一个竖直跑马灯(Vertical Marquee)效果,这种效果常见于滚动显示文字或信息的场景,如公告栏、广告栏等。 首先,我们了解跑马灯的基本原理。跑马灯是通过不断地移动文字的位置来模拟滚动...

    文字垂直跑马灯自定义控件

    在Android中,实现文字跑马灯效果通常涉及到对TextView的重写或者使用Animation类。开发者需要创建一个继承自TextView的自定义View,并在其内部实现滚动逻辑。这可能包括设置文本的偏移量、控制滚动速度以及处理边界...

    Android-自定义跑马灯MarqueeView

    在Android开发中,有时我们需要实现类似跑马灯的效果,即文字自动滚动显示。标题提到的“Android-自定义跑马灯MarqueeView”是针对这一需求的解决方案。默认的Android SDK提供了一个叫做`TextView`的控件,它具有...

    Android跑马灯的效果

    在Android开发中,跑马灯效果通常指的是文字或图片在界面上不断滚动,形成一种循环显示的效果,类似于现实生活中霓虹灯的动态显示。这种效果常用于通知、提示或者广告栏等场景。在这个项目中,我们将探讨如何实现...

    老罗视频代码textview跑马灯效果

    【跑马灯效果】在Android开发中,通常指的是TextView中的滚动文字效果,也称为Marquee效果,这种效果会让过长的文字在控件宽度内不断滚动,就像跑马灯一样。在老罗的视频中,他可能讲解了如何通过代码实现这一效果。...

    Android自定义跑马灯文字效果

    Android自定义跑马灯文字效果是指在Android平台上实现跑马灯文字效果的技术,通过自定义TextView控件,实现文字的水平滚动动画,达到跑马灯文字效果。 1. 自定义TextView控件 首先,我们需要自定义一个TextView...

    android 跑马灯(textview滚动显示)

    只需粘贴run_led.java 并进行一些基本的设置即可 值得注意的是 使用该控件的时候,这句需要根据自己的路径来更改,初学者留一下,不然会崩的。

Global site tag (gtag.js) - Google Analytics