`

[转]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文字跑马灯控件(文本自动滚动控件,左右移动.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

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

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

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

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

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

    一款跑马灯的文本控件,已经封装好,可控制速度,方向和状态

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

    结合网上资源写的一个带动画,可部分选中的单行文本跑马灯控件的Eclipse工程源码。

    android 跑马灯(textview滚动显示)

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

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

    第三方自定义控件,实现了文字垂直跑马灯功能,完美运行直接拷入lib引用

    Android中设置文字跑马灯效果不动

    在跟着B站Up主天哥在奔跑,学习Android的TextView控件时,想要实现一个跑马灯效果,但是按照视频中的代码发现文字是不会动的。...经过编译运行之后,实现了文字跑马灯的效果。 原创文章 1获赞 1访问量 47

    Android中继承TextView实现文字的跑马灯效果

    Android中继承TextView实现文字的跑马灯效果,详细了解请移步http://blog.csdn.net/zxc514257857/article/details/70184606

    TextView实现跑马灯效果

    好像跑马灯这种效果已经不用咱们来实现了 呵呵 不过有一点 如果文字不过长 在组件的范围内 还想要跑马灯的效果怎么办呢 当然的自己自定义啦 那还能怎么做 哈哈 "&gt;android:ellipsize设置当文字过长时 该控件该如何...

    android自定义View实现跑马灯效果

    android自带的TextView可以实现跑马灯效果,但是有很多的局限性;比如需要设置ellipsize=”marquee”,获取 focusable=”true”,设置singleLine=”true”,控件里的内容需要超过控件本身的长度,无法控制滚动速度和...

    Android用过TextView实现跑马灯效果的示例

    跑马灯效果其实就是当文字超过TextView控件宽度的时候,使用滚动的方式显示出来: 方法1:(直接xml搞定) Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1、android:ellipsize=”marquee”; 2...

    AnimTextView_android_

    文字跑马灯文字水平自动滚动控件及效果演示,文字左右移动特效,文字滚动速度可调、文本颜色也可以自定义

    Android应用源码安卓源码(172个合集).zip

    ImageView 图片循环跑马灯的效果.rar ipcamera-for-android 手机变成IP Camera.rar jamendo-开源在线音乐.rar jchat4android手机聊天程序.rar LoginXml.rar MineSweeper由java实现.zip miniTwitter登录界面.rar ...

    Android实现在TextView文字过长时省略部分或滚动显示的方法

    本文实例讲述了Android实现在TextView文字过长时省略部分或滚动显示的方法。分享给大家供大家参考...4.android:ellipsize=”marquee”–以跑马灯的方式显示(动画横向移动) 文字左右滚动三个属性: android:singleLin

    老罗android视频开发源码和ppt经典

    6.4 TextView实现跑马灯效果 6.5 EditText输入表情图像 6.6 EditText中输入特定的字符 6.7 AutoCompleteTextView完成输入 6.8 Button按钮的焦点变化 6.9 Button图文混排的按钮 6.10 RadioButton单选按钮的使用 6.11 ...

    Android开发EditText属性.txt

    ”marquee” ——以跑马灯的方式显示(动画横向移动) android:freezesText设置保存文本的内容以及光标的位置。参见:这里。 android:gravity设置文本位置,如设置成“center”,文本将居中显示。 android:hintText...

    Android音乐播放器制作 加入控制台(三)

    文字跑马灯:TextView的跑马灯效果以及TextView的一些属性 具体实现 首先是布局文件中添加了如下代码,这些代码就是实现控制台的,给整体设置了一个invisible,为了让他点击有音乐播放的时候控制台才显示出来: &lt;...

    java版商城源码下载-AndroidNotes:安卓开发笔记

    跑马灯效果textview 来自酷安开源协议 带动画的textview 来自酷安开源协议 自定义省略号的textview 来自酷安开源协议 跑马灯 3.2k 来自awesome-android-ui github最强大的开源项目收集者 36k 文字拓展视图、类似...

Global site tag (gtag.js) - Google Analytics