第一种方法(很普遍,很简单的在xml布局文件中设置TextView的属性):

<TextView         android:id="@+id/tv_text"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:ellipsize="marquee"        android:focusable="true"        android:focusableInTouchMode="true"        android:marqueeRepeatLimit="marquee_forever"        android:singleLine="true"        android:textSize="28sp"        android:text="路漫漫其修远兮,吾将上下而求索"        android:textColor="#00ff00"        android:scrollHorizontally="true"/>

重要代码:

//设置为跑马灯显示

android:ellipsize="marquee"

//获取焦点
android:focusable="true"

//可以通过toucth来获得focus
android:focusableInTouchMode="true"

//设置重复的次数
android:marqueeRepeatLimit="marquee_forever"

//单行显示文字
android:singleLine="true"

2.第二种方法,由于大部分走马灯文字会在手机屏幕的右侧开始,这需要自定义控件来实现了

java代码:

package com.example.cameratestdemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.os.Handler;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.widget.TextView;/** * 自定义控件循环走马灯的实现 *  * @author cyf 继承自TextView */public class Util extends TextView implements Runnable {    private static final String TAG = "MarqueeTextView";    // 设置跑马灯重复的次数,次数    private int circleTimes = 3;    //记录已经重复了多少遍    private int hasCircled = 0;    private int currentScrollPos = 0;    // 跑马灯走一遍需要的时间(秒数)    private int circleSpeed = 10;    // 文字的宽度    private int textWidth = 0;    private boolean isMeasured = false;    // Handler机制    private Handler handler;    private boolean flag = false;    // 构造方法    public Util(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        this.removeCallbacks(this);        post(this);    }    /**     * 画笔工具     */    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        if (!isMeasured) {            getTextWidth();            isMeasured = true;        }    }    @Override    public void setVisibility(int visibility) {        // 二次进入时初始化成员变量        flag = false;        isMeasured = false;        this.hasCircled = 0;        super.setVisibility(visibility);    }    @Override    public void run() {        // 起始滚动位置        currentScrollPos += 1;        scrollTo(currentScrollPos, 0);        // Log.i(TAG, "pos"+currentScrollPos);        // 判断滚动一次        if (currentScrollPos >= textWidth) {            // 从屏幕右侧开始出现            currentScrollPos = -this.getWidth();            //记录的滚动次数大设定的次数代表滚动完成,这个控件就可以隐藏了            if (hasCircled >= this.circleTimes) {                this.setVisibility(View.GONE);                flag = true;            }            hasCircled += 1;        }        if (!flag) {            // 滚动时间间隔            postDelayed(this, circleSpeed);        }    }    /**     * 获取文本显示长度     */    private void getTextWidth() {        Paint paint = this.getPaint();        String str = this.getText().toString();        Log.i(TAG, str);        if (str == null) {            textWidth = 0;        }        textWidth = (int) paint.measureText(str);    }    /**     * 设置滚动次数,达到次数后设置不可见     *      * @param circleTimes     */    public void setCircleTimes(int circleTimes) {        this.circleTimes = circleTimes;    }    public void setSpeed(int speed) {        this.circleSpeed = speed;    }    public void startScrollShow() {        if (this.getVisibility() == View.GONE)            this.setVisibility(View.VISIBLE);        this.removeCallbacks(this);        post(this);    }    private void stopScroll() {        handler.removeCallbacks(this);    }}

布局文件中呀使用自定义控件了:

<com.example.cameratestdemo.Util        android:id="@+id/tv_text"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:ellipsize="marquee"        android:focusable="true"        android:focusableInTouchMode="true"        android:marqueeRepeatLimit="marquee_forever"        android:scrollHorizontally="true"        android:singleLine="true"        android:text="路漫漫其修远兮,吾将上下而求索"        android:textColor="#00ff00"        android:textSize="28sp" >    </com.example.cameratestdemo.Util>

源码下载:

http://yunpan.cn/c3kL7ILLL7tCt 访问密码 bd75

欢迎提出意见,希望可以给大家带来帮助,谢谢

更多相关文章

  1. Android(安卓)ListView分隔线
  2. DatePicker 日期选择控件 DatePickerDialog 日期选择对话框
  3. android ListView 属性
  4. Android(安卓)Layout xml 中的几个概念
  5. 自定义控件attrs文件里的属性
  6. Android之自定义ListView滚动条样式
  7. 一个Demo让你掌握所有的android控件
  8. 系出名门Android(8) - 控件(View)之TextSwitcher, Gallery, Imag
  9. Android学习笔记(9)---FrameLayout中上下层可点击设置

随机推荐

  1. Android常用工具及优秀软件
  2. Android(安卓)完美的水平方向滑动ListVie
  3. Android手势识别
  4. android MVP 设计模式
  5. Android(安卓)界面开发---控件事件监听器
  6. 关于android 字体
  7. Android(安卓)4.1.2 锁屏(LockScreen)分析
  8. android 6.0后usb otg设备不显示在文件管
  9. Android(安卓)4.2 输入流程分析
  10. 将Activity打包成jar文件