Android实现跑马灯效果的代码详解
#代码知识 发布时间: 2026-01-12
目录
- Android 实现跑马灯效果
- 1: TextView属性实现
- 2: 代码实现
- 3: 自定义 view实现
- 4: 实现竖直效果的跑马灯
Android 实现跑马灯效果
Android中实现跑马灯效果有多种方式,本篇简单介绍下:

1: TextView属性实现
<TextView
android:layout_width="150dp"
android:layout_height="wrap_content"
android:background="#77000000"
android:padding="5dp"
android:singleLine="true"
android:ellipsize="marquee"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="这是textview的跑马灯效果"
android:id="@+id/tv1"
/>
这里需要注意下:
- 需要限制textview的宽度,不能设置为wrap_content
- 启动跑马灯效果需要获取焦点requestFocus().
2: 代码实现
//设置TextView只显示一行文本。 tv2.setSingleLine(); //设置TextView的文本内容是否可以水平滚动。 tv2.setHorizontallyScrolling(true); //设置当TextView的文本内容超出可显示范围时的省略方式,这里设置为跑马灯效果。 tv2.setEllipsize(TextUtils.TruncateAt.MARQUEE); //设置跑马灯效果重复的次数,-1表示无限重复。 tv2.setMarqueeRepeatLimit(-1); //设置TextView是否可以获取焦点。 tv2.setFocusable(true); //设置TextView在触摸模式下是否可以获取焦点。 tv2.setFocusableInTouchMode(true); //请求获取焦点。 tv2.requestFocus();
3: 自定义 view实现
这里可以使用动画的效果实现.
package com.test.marquee;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.LinearInterpolator;
import androidx.annotation.Nullable;
public class MarqueeView extends View {
private String text;
private Paint paint;
private float textWidth;
private float textX;
private float viewWidth;
private ValueAnimator animator;
public MarqueeView(Context context) {
super(context);
init();
}
public MarqueeView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public MarqueeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
text = “This is a marquee”;
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(50);
paint.setColor(Color.BLACK);
textWidth = paint.measureText(text);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
viewWidth = w;
textX = viewWidth;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(text, textX, getHeight() / 2, paint);
}
public void startMarquee() {
animator= ValueAnimator.ofFloat(viewWidth, -textWidth);
animator.setDuration(5000);
animator.setInterpolator(new LinearInterpolator());
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.addUpdateListener(animation -> {
textX = (float) animation.getAnimatedValue();
invalidate();
});
animator.start();
}
public void stopMarquee() {
// 停止动画
if (animator!=null) animator.cancel();
}
}
4: 实现竖直效果的跑马灯
package com.test.marquee;
import android.content.Context;
import android.graphics.Canvas;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
public class VerticalMarqueeTextView extends AppCompatTextView {
private float offsetY;
public VerticalMarqueeTextView(Context context) {
super(context);
init();
}
public VerticalMarqueeTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
setSingleLine();
setEllipsize(TextUtils.TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setFocusable(true);
setFocusableInTouchMode(true);
setHorizontallyScrolling(true);
setMovementMethod(ScrollingMovementMethod.getInstance());
}
@Override
protected void onDraw(Canvas canvas) {
canvas.translate(0, offsetY);
super.onDraw(canvas);
}
@Override
public boolean isFocused() {
return true;
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
post(new Runnable() {
@Override
public void run() {
offsetY -= 1;
if (offsetY <= -getHeight()) {
offsetY = 0;
}
invalidate();
postDelayed(this, 20);
}
});
}
}
以上就是Android实现跑马灯效果的代码详解的详细内容,更多关于Android跑马灯的资料请关注其它相关文章!
代码知识SEO上一篇 : 最后说说Vue2 SSR 的 Cookies 问题
下一篇 : python matplotlib 在指定的两个点之间连线方法
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!