如何实现textview marquee的Marquee效果

Android界面和组件(62)
文字左右滚动三个属性:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟
ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现。
android:id="@+id/tvCWJ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
& & android:scrollbars="vertical"
& & android:singleLine="false"
& & android:maxLines="15"
android:textColor="#FF0000"
android:id="@+id/app_shortcontent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
& & android:singleLine="true"
& & android:textColor="#FFFFFFFF"
android:scrollHorizontally="true"
& & android:focusable="true"
& & android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"/&
当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下
TextView tv =
(TextView)findViewById(R.id.tvCWJ);
tv.setMovementMethod(ScrollingMovementMethod.getInstance()); //
Android开发网提示相关的可以查看SDK中android.text.method分支了解更多
顺便讲下 TextView 自动滚动的实现方法,下面介绍两种方法:
一、在代码中实现:
& & & textView
.setEllipsize(TextUtils.TruncateAt.MARQUEE);
& & & textView
.setSingleLine(true);
& & textView
.setMarqueeRepeatLimit(6);
二、在XML中实现:
&android:layout_height="wrap_content"
android:singleLine="true"
&android:text="dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
&android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee"
&android:scrollHorizontally="true"
android:width="150dip"&
一切OK,当 textView 获取焦点后,就会自动滚动。
补充==============================
不管是手动还是自动 你要实现滚动就得加scrollview
到时候可以通过handle来调用scrollview的scrollTo方法实现滚动
Handler mHandler = new Handler();
private Runnable mScrollToBottom = new Runnable()
& public void run() {
& & mScrollView.scrollTo(0,
onTouch里面
mHandler.post(mScrollToBottom);
补充====================
1,把 textview的 Ellipsize 设置成 marquee(上面有说)
2,把 Deprecated的 Single line 设置成 true
3,设置textview的Marquee repeat limit
属性(滚动回数,默认是无数回)
贴个代码吧.
&textview.setEllipsize(TextUtils.TruncateAt.MARQUEE);
&textview.setSingleLine(true);
&textview.setMarqueeRepeatLimit(6);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:132356次
积分:3644
积分:3644
排名:第6652名
原创:211篇
转载:222篇
(1)(13)(2)(3)(8)(9)(11)(6)(1)(48)(24)(4)(7)(2)(5)(7)(16)(6)(2)(2)(20)(43)(185)[Android] TextView实现走马灯效果 - 博客频道 - CSDN.NET
zhang3776813的专栏
分类:Android实用Demo
在TextViw中,如果文本的长度超出了显示范围,可以使文本水平滚动显示,类似于走马灯的效果,只需在XML布局文件中,为TextView设置如下几个属性即可。
& & & & android:ellipsize=&marquee&。
& & & & android:marqueeRepeatLimit=&XX&。其中XX表示循环次数,为大于0的整数或marquee_forever(无限循环)。
& & & & android:focusable=&true&。只有处于焦点状态的TextView才能显示走马灯效果。
& & && 如下是完整的XML代码。
& & & & 实现效果如下图。
zhang3776813
排名:千里之外
(8)(197)(19)(17)(2)(4)怎么实现TextView的Marquee效果
&来源:读书人网&【读书人网():综合教育门户网站】
如何实现TextView的Marquee效果往往看到一些应用的标题栏中当标题超出时便会自动滚动这篇文章要讲的就是如
如何实现TextView的Marquee效果
往往看到一些应用的标题栏中当标题超出时便会自动滚动这篇文章要讲的就是如何去实现TextView的Marquee效果其实TextView已经自带了如何实现滚动的属性??android:singleLine="true"android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever"?通过上面的属性设置就能让TextView滚动起来。当然也可以通过代码去设置。但是当设置完之后发现并没有滚动起来,原来TextView滚动的前提是这个空间必须要获得焦点。TextView需要必须处于focus状态。在TextView的父类View中有一个方法isFocused(),系统通过这个方法去判断一个空间是否获得焦点。所以我们就有了解决方案:写一个子类继承TextView,重写isFocused()方法,直接返回true。当通过这个函数去判断TextView有没有获得焦点时,总是返回获得焦点于是我们的TextView就开始滚动起来了。代码很简单:public class AlwaysMarqueeTextView extends TextView {
* constructor
* @param context Context
public AlwaysMarqueeTextView(Context context) {
super(context);
* constructor
* @param context Context
* @param attrs AttributeSet
public AlwaysMarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
* constructor
* @param context Context
* @param attrs AttributeSet
* @param defStyle int
public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public boolean isFocused() {Cindere_liuqiqi 的BLOG
用户名:Cindere_liuqiqi
文章数:53
评论数:12
访问量:48968
注册日期:
阅读量:5863
阅读量:12276
阅读量:351224
阅读量:1049673
51CTO推荐博文
& &Hello,大家好,好久不见啦。博主最近忙着实习的事儿,博文的更新有些耽搁啦,大家久等了吧。闲话少叙,直接进入我们今天的主题。 & &最近,在北京的某家公司做实习生,正处于看代码的阶段,马上过年啦,估计年前没有什么任务啦,所以把自己收集的一些特效整理出来。一起来看看吧。 & &今天,给大家带来的是字幕滚动效果:它主要实现的就是文字的自动滚动效果(比如:快过年了,每年CCTV1的春节联欢晚会屏幕下方会滚动一些消息,如:什么海外侨胞发来贺电等等之类的)。具体我们来看看怎么实现吧。 & &一:自定义View & &扩展自TextView,实现Runnable接口,重写三个构造方法,及onDraw方法,滚动线程的开启与停止。具体如下:package com.example.
import android.content.C
import android.graphics.C
import android.graphics.P
import android.util.AttributeS
import android.util.L
import android.widget.TextV
* 重写TextView,实现文字的滚动效果
public class Marquee extends TextView implements Runnable {
/** 当前位置坐标 */
private int currentScrollX;
/** 停止标志 */
private boolean isStop =
/** 文本长度 */
private int textW
/** 可测量标志 */
private boolean isMeasure =
/** 三个构造函数 */
public Marquee(Context context) {
super(context);
public Marquee(Context context, AttributeSet attrs) {
super(context, attrs);
public Marquee(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// 查看可测量标志
// 若不可测量的话,我们就获得文本信息得宽度,改变状态标志为可测量
if (!isMeasure) {
getTextWidth();
isMeasure =
/** 测量文本的宽度 */
private void getTextWidth() {
Paint paint = this.getPaint();
String str = this.getText().toString();
textWidth = (int) paint.measureText(str);
public void run() {
currentScrollX -= 1;
scrollTo(currentScrollX, 0);// 偏移至(currentScrollX, 0)
if (isStop) {
Log.e("", "run------------this.getwidth:" + this.getWidth());// ---244
Log.e("", "run------------textWidth:" + textWidth);// ---0
Log.e("", "currentScrollX:" + currentScrollX);
Log.e("", "getScrollX:" + getScrollX());
if (getScrollX() &= -(this.getWidth())) {// -255&-244
scrollTo(textWidth, 0);// 移动到(0,0)位置
currentScrollX = textW// 改变当前位置=0
postDelayed(this, 80);// 第二个参数控制滚动速度,数值越大滚动越慢
/** 开始滚动 */
public void startScroll() {
currentScrollX = 0;// 起始坐标X=0
isStop =// 停止标志=false,标示开始滚动
this.removeCallbacks(this);
post(this);// 开始滚动
/** 停止滚动 */
public void stopScroll() {
isStop =// 停止
} & &二:主配置文件 & &添2个按钮,控制滚动的开始与停止(实际使用的时候,可能不需要控制,是显示界面的时候直接滚动);添加自定义的控件Marquee。&LinearLayout xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" &
&LinearLayout
android:layout_width="fill_parent"
android:layout_marginTop="20dip"
android:layout_height="wrap_content"
android:background="#00ff00"
android:gravity="center"&
&com.example.marquee.Marquee
android:id="@+id/myscrollview"
android:layout_width="wrap_content"
android:background="#CCCCCC"
android:textSize="20dip"
android:singleLine="true"
android:gravity="left|center_vertical"
android:layout_height="50dip" /&
&/LinearLayout&
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="20dip"
android:gravity="center"&
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="30dip"
android:text="start" /&
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="stop" /&
&/LinearLayout&
&/LinearLayout& & &三:主程序入口 & &(1)初始化View,找ID; & &(2)初始化要显示的数据(这里为具体的滚动屏幕显示的文字); & &(3)设置按钮监听; & &(4)实际的具体操作。package com.example.
import java.text.SimpleDateF
import java.util.D
import android.app.A
import android.os.B
import android.text.TextU
import android.view.V
import android.view.View.OnClickL
import android.widget.B
public class MainActivity extends Activity implements OnClickListener {
/**自定义控件*/
private Button start,
/**显示文本*/
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initview();
initdata();
setListener();
* 初始化要显示的数据
public void initdata() {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy年MM月dd日
HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
str = formatter.format(curDate);
/**初始化VIew--找ID等*/
public void initview() {
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop);
marquee = (Marquee) findViewById(R.id.myscrollview);
/** 统一添加监听 */
public void setListener() {
addlistener(start);
addlistener(stop);
/** 添加监听 */
public void addlistener(View view) {
view.setOnClickListener(this);
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.start:
case R.id.stop:
/** 开始滚动 */
private void start() {
String time =
// String time = "黑夜给了我黑色的眼睛,而我却用它来寻找光明...";//同样可以滚动
if (!TextUtils.isEmpty(time)) {
// 先设置编译时间
marquee.setText(time);
// 文本长度大于20个字符才开始移动
if (time.length() & 20)
// 开始滚动
marquee.startScroll();
} else {// 否则的话显示为空
marquee.setText("未知");
/** 停止滚动 */
public void stop() {
marquee.stopScroll();
} & &四:实现效果 & &由于是动态的滚动效果,不是很好捕捉,那博主将源码奉上,供大家私下里去看看效果,这里仅仅是捕捉几个具有代表性的图片展示给大家而已。 & &屏幕滚动效果到此就完成啦。源码在附件中哦。。 & &最近在同一首歌曲《终于等到你--张靓颖》,其中有一句歌词:渐渐开始尝到孤单的味道,时间在敲打着你的骄傲。是啊,我们的骄傲逐渐被磨平,承认孤单,做最好的自己。本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)Android(2)
往往看到一些应用的标题栏中当标题超出时便会自动滚动
这篇文章要讲的就是如何去实现TextView的Marquee效果
其实TextView已经自带了如何实现滚动的属性
android:singleLine=&true&
android:ellipsize=&marquee&
android:marqueeRepeatLimit=&marquee_forever&
通过上面的属性设置就能让TextView滚动起来。当然也可以通过代码去设置。
但是当设置完之后发现并没有滚动起来,原来TextView滚动的前提是这个空间必须要获得焦点。TextView需要必须处于focus状态。
在TextView的父类View中有一个方法isFocused(),系统通过这个方法去判断一个空间是否获得焦点。
所以我们就有了解决方案:
写一个子类继承TextView,重写isFocused()方法,直接返回true。当通过这个函数去判断TextView有没有获得焦点时,总是返回获得焦点于是我们的TextView就开始滚动起来了。代码很简单:
public class AlwaysMarqueeTextView extends TextView {
* constructor
* @param context Context
public AlwaysMarqueeTextView(Context context) {
super(context);
* constructor
* @param context Context
* @param attrs AttributeSet
public AlwaysMarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
* constructor
* @param context Context
* @param attrs AttributeSet
* @param defStyle int
public AlwaysMarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
public boolean isFocused() {
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:229次
排名:千里之外
(1)(1)(1)(1)

我要回帖

更多关于 textview实现滚动显示 的文章

 

随机推荐