自定义实现跑马灯

Android 自定义View实现竖直跑马灯效果 首先给出效果图 中间的色块是因为视频转成GIF造成的失真,自动忽略哈。 大家知道,横向的跑马灯android自带的TextView就可以实现,详情请百度【Android跑马灯效果】。但是竖直的跑马灯效果原生Android是不支持的。网上也有很多网友实现了自定义的效果,但是我一贯是不喜欢看别人的代码,所以这篇博客的思路完全是我自己的想法哈。 首先,我们需要给自定义的控件梳理一下 阅读详情
//主布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/myTextView"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
        android:text="testf;dsafjieoafjesla;fjdioa;"
        android:textColor="@android:color/black" >
    </TextView>

    <com.example.test.HorizontalScorllTextView 
        android:id="@+id/scrollTextView"
        android:layout_width="200dp"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/myTextView"
        android:layout_height="wrap_content"
        android:scrollbars="none"
        ></com.example.test.HorizontalScorllTextView>
    <com.example.test.MarqueeTextView 
        android:id="@+id/marqueeTextView"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:text="tesja;eao;ffjidaofjieloafj.afiaeofjidk.afjie"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/scrollTextView"
        />

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <TextView
        android:id="@+id/tv_video_name"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:singleLine="true"
        android:textColor="#000000"
        android:textSize="15sp" 
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="10px"
        android:layout_marginRight="10px"
        />
</LinearLayout>
package com.example.test;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HorizontalScorllTextView scrollView = (HorizontalScorllTextView) findViewById(R.id.scrollTextView);
        scrollView.setText("fdajffjdka;lsfieafja;fjisdaofjeifjekalfjdioafjieafj;dsafaefeaf;ejifda;fjie");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
package com.example.test;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.TextView;
import com.example.test.R;

public class HorizontalScorllTextView extends HorizontalScrollView implements Runnable{

    int currentScrollX = 0;// 当前滚动的位置
    TextView tv;

    public HorizontalScorllTextView(Context context) {
        super(context);
        initView(context);
    }

    public HorizontalScorllTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    public HorizontalScorllTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView(context);
    }

    void initView(Context context){
        View v = LayoutInflater.from(context).inflate(R.layout.scroll_layout, null);
        tv = (TextView)v.findViewById(R.id.tv_video_name);
        this.addView(v);
    }

    public void setText(String text){
        tv.setText(text);
        startScroll();
    }

    private void startScroll(){
        this.removeCallbacks(this);
        post(this);
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        currentScrollX ++;// 滚动速度
        scrollTo(currentScrollX, 0);

        if (currentScrollX >= tv.getWidth()) {
                scrollTo(0, 0);
                currentScrollX = 0;
        }
        postDelayed(this, 50);
    }
}
package com.example.test;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

public class MarqueeTextView extends TextView implements Runnable {
    private int currentScrollX;// 当前滚动的位置
    private boolean isStop = false;
    private int textWidth;
    private boolean isMeasure = false;

    public MarqueeTextView(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
    }

    public MarqueeTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
    }

    public MarqueeTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            if (!isMeasure) {// 文字宽度只需获取一次就可以了
                    getTextWidth();
                    isMeasure = true;
            }
    }

    /**
     * 获取文字宽度
     */
    private void getTextWidth() {
            Paint paint = this.getPaint();
            String str = this.getText().toString();
            textWidth = (int) paint.measureText(str);
    }

    @Override
    public void run() {
            currentScrollX -= 1;// 滚动速度
            scrollTo(currentScrollX, 0);
            if (isStop) {
                    return;
            }
            if (getScrollX() <= -(this.getWidth())) {
                    scrollTo(textWidth, 0);
                    currentScrollX = textWidth;
//                    return;
            }
            postDelayed(this, 10);
    }

    // 开始滚动
    public void startScroll() {
            isStop = false;
            this.removeCallbacks(this);
            post(this);
    }

    // 停止滚动
    public void stopScroll() {
            isStop = true;
    }
    // 从头开始滚动
    public void startFor0() {
        currentScrollX = 0;
        startScroll();
    }
    @Override
    public void setText(CharSequence text, BufferType type) {
        // TODO Auto-generated method stub
        super.setText(text, type);
        startScroll();
    }    
    @Override
    public void destroyDrawingCache() {
        // TODO Auto-generated method stub
        super.destroyDrawingCache();
    }
}

这里写图片描述

android 跑马灯效果的基本实现以及自定义实现一个界面多个跑马灯效果 前言:    我相信很多人都在实现过android的跑马灯效果,肯定也有很多人说一个界面不能实现多个跑马灯效果,其实是可以实现的,今天我们就带你实现一下。 跑马灯最简单的代码实现如下:  <TextView    android:layout_width="100px"    android:layout_height="wrap_content"    android: 阅读详情

相关推荐

实现iOS跑马灯效果的自定义UILabel

在移动应用开发中,经常遇到UI组件需要特定行为的情况。例如,在一个新闻阅读应用中,我们可能需要让标题或者某些文本信息以跑马灯的方式显示,以此来吸引用户的注意力。对于这种情况,虽然 iOS 的 UILabel 控件提供了基本的显示功能,但它本身并不支持动画效果,如文本的滚动。为了满足这种需求,我们可以创建一个自定义的 UILabel 子类,通过继承并重写UILabel的属性和方法,来实现跑马灯效果。自定义的子类可以让我们的视图组件更加模块化,并且可以重用在其他地方,这在iOS开发中是一种常见的做法。

weixin_35509395的博客 887

自定义文字跑马灯效果(滚动文字)

丝滑滚动问题 无焦点限制 无文字长度限制

TomCat0916的博客 1692

自定义垂直跑马灯效果实现指南

自定义View在Android开发中是实现高度定制UI控件的强大方式。要创建自定义View,通常需要继承View类或者它的子类,比如TextView或Button。当我们创建一个新的类并继承自View类时,我们就拥有了几乎无限的可能性来自定义我们的控件。在这段代码中,我们创建了一个名为的新类,它继承自View类。我们同时提供了三个构造函数,这是在Android开发中继承自View类时的一种常见实践。Context参数代表了视图环境,参数包含在XML中定义的所有属性,而。

weixin_33610780的博客 587

element ui plus跑马灯放置图片,实现轮播效果,图片路径在assets

首先在element ui plus里面找到跑马灯,复制一个下来用 复制需要用到代码,就这里就好了 <el-carousel height="150px"> <el-carousel-item v-for="item in 4" :key="item"> <h3 class="small">{{ item }}</h3> </el-carousel-item> </el-carousel&gt

qq_51055690的博客 1万+

自定义AnimTextView控件实现Android文字跑马灯动画

AnimTextView 是 Android 开发中常用的一种自定义动画文本控件。它不仅能够显示普通的文本内容,还能够通过各种动画效果增强文本的视觉表现力。与标准的 TextView 相比,AnimTextView 提供了更多的动画选项和定制性,使得开发者能够轻松实现文字的动态展示效果,例如跑马灯、颜色变化、位置移动等。文字滚动速度是动画效果中的一个关键要素,它决定了动画的快慢和用户体验的自然度。

weixin_36122351的博客 788

自定义View实现炫酷跑马灯效果

为优化界面,通过自定义View实现炫酷跑马灯效果,图片的优化,有三种形式实现(自定义实现最炫酷)

android TextView 自定义跑马灯

Android中TextView自定义跑马灯效果 在Android应用开发中,TextView控件常用来显示静态文本内容。但有时候我们也需要一些动态效果来吸引用户的注意,比如跑马灯效果。Android系统提供了默认的TextView跑马灯效果,但是有时候我们需要自定义跑马灯效果来满足特定需求。 本文将介绍如何在Androi...

weixin_33224795的博客 637

自定义垂直跑马灯LinearLayout

自定义垂直跑马灯LinearLayout

教你自定义竖直跑马灯效果(广告专用)

最近因为项目需要,写了一个跑马灯效果的控件,过程中也学到一些东西,在这里和大家分享一下。 首先让我们来看一下效果:

crazychen的专栏 7770

自定义TextView实现文字的跑马灯效果

自定义TextView实现文字的跑马灯效果,里面的东西很全、很基础,适合初学者,简单易懂。

自定义跑马灯

NULL 博文链接:https://gzsxt.iteye.com/blog/2070437

Android 自定义跑马灯

前言 最近公司接到小需求--「可以滚动的提示」,其实就是跑马灯。这让我想到了大学时专业物联网,当时学的单片机入门教程就是跑马灯,很是亲切。其实就是灯(或文字)按照某个方向循环滚动。 Android 原生的跑马灯 其实,Android中的TextView自带跑马灯效果,只需要通过简单的配置,就可以完成滚动的效果。 在XML中进行配置 &lt;TextView android:id="@+id...

weixin_33843409的博客 364

OneOS远程升级能力实操演示 | OTA升级

OneOS远程升级能力实操演示,差分算法提升效率,OTA升级,OTA差分算法,全量升级、压缩升级、差分升级,有线网络连接,bootloader,升级平台,在线差分包制作,触摸屏以及GUI图形操作

OneOS是中国移动针对物联网领域推出的轻量级操作系统 2011

Android自定义TextView实现跑马灯功能

首先我们要实现走马灯这样一个效果,通常来说都是在TextView这个控件中来实现的,而且其中的文字一定是单行显示,如果多行显示,那走马灯效果也就失去了存在的意义。谈到TextView的跑马灯,我们首先应该想到android:ellipsize="marquee"(start、end属性表示前或者后省略),而如果要在view中实现跑马灯功能,就需要TextView改为Button,开启触控焦点在开启

zeb_perfect的专栏 1362

第055篇:陆地观测卫星数据服务平台高级检索方法

检索数据检索到肩膀疼,这谁能信?谁能?

liujinli0712的博客 7823

YT8531 PHY芯片硬件设计与MDIO/RGMII实战指南

以太网PHY芯片是FPGA系统实现网络通信的物理层核心,其关键在于标准接口(如MDIO管理总线和RGMII数据接口)的正确实现与协同。MDIO作为IEEE 802.3定义的低速配置通道,负责寄存器级控制与状态监控;RGMII则通过双沿采样精简引脚,在千兆速率下兼顾性能与PCB布线可行性。技术价值体现在电压兼容性(支持1.8V/2.5V/3.3V)、可编程时序调节(RX_DELAY/TX_DELAY)及多级环回测试能力,显著提升国产FPGA平台(如Xilinx Zynq)的工程鲁棒性。典型应用场景涵盖嵌入式网

weixin_42453228的博客 1337

android+自定义跑马灯,Android自定义TextView实现跑马灯功能

未用自定义TextView实现跑马灯代码:android:focusableInTouchMode="true"android:singleLine="true"android:ellipsize="marquee"android:text="未使用自定义TextView的跑马灯效果"android:textSize="18sp"android:layout_width="fill_parent"...

weixin_42499882的博客 274

Vue3 - Arco Design Vue 表格组件 table 隐藏鼠标移入时 hover 高亮背景色,el-table 组件去除鼠标悬停在表格行的 hover 高亮效果(改变鼠标移入时的背景色)

vue3,arcodesignvue,arcodesign,表格,a-table,hover,表格hover的class类名是什么,class,hover,在arcodesignvue项目中,表格组件如何去掉鼠标移入时的hover效果,vue3arco.design表格组件修改鼠标移入行的背景颜色,table表格,取消表格行row移入高亮效果,去掉鼠标移入行时的hover效果,取消a-table的hover状态,取消高亮显示,隐藏表格鼠标hover效果,去除鼠标触摸变色效果,如何取消arco表

🏆 前端领域优质创作者 3771

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

android自带的TextView可以实现跑马灯效果,但是有很多的局限性;比如需要设置ellipsize=”marquee”,获取 focusable=”true”,设置singleLine=”true”,控件里的内容需要超过控件本身的长度,无法控制滚动速度和滚动暂停和继续滚动功能,各种限制导致用起来特别不顺手,几乎无法使用到生产环境中,在此背景下,需要自定义View实现跑马灯效果。使用主要方法...

weixin_33871933的博客 955

2026.2.3:OpenClaw国内安装教程,国内网络使用,服务器部署,对接飞书

本文介绍了如何创建飞书应用并接入OpenClaw机器人的完整流程。主要内容包括:1)在飞书开放平台创建企业自建应用,添加机器人能力并开通相关权限;2)在Windows11系统上安装OpenClaw,完成配置文件的修改(需将bind改为"lan");3)配置MiniMax国内接口地址,重启gateway服务。整个过程涵盖了应用创建、权限设置、软件安装、服务配置等关键步骤,为开发者提供了详细的飞书机器人接入指南。

拥抱具身智能,昇腾Ascend C 3993

【C++】DDS:FastDDS环境配置与使用示例

FastDDS环境配置与使用示例

DevFrank的博客 6506

Android自定义MarqueeView 实现跑马灯效果

自定义MarqueeView 实现跑马灯效果

weixin_43117800的博客 287

CODESYS数据处理合集(高低字节/ 字/浮点数/位)

VAR_INPUT//字节0//字节1END_VARVAREND_VAR。

RXXW_Dor的博客 354

android跑马灯效果横向,Android 通过自定义View实现纵向跑马灯效果

录制的gif有点卡,真实的效果还是很流畅的。跑马灯在我们日常使用的app中还是很常见的,以前做外卖app的时候商家公告就使用了此效果,但是它是横向滚动的,横向滚动多适用于单条信息;但凡涉及到多条信息的滚动展示,用纵向滚动效果会有更好的用户体验,今天我们通过自定义View来看看如何实现纵向跑马灯效果。思路通过上面的gif图可以得出结论,其实它就是同时绘制两条文本信息,然后通过动画不断的改变两条文本信...

weixin_36469726的博客 435

【Bluedroid】BLE连接过程详解

Bluedroid BLE的链接过程包括扫描、连接和通信三个基本步骤。通过这些步骤,中央设备和外围设备之间可以建立起稳定、高效的通信链路,实现数据传输和控制操作。

byte轻骑兵的技术小窝 1876

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

自定义view 实现跑马灯效果

自定位View的广泛使用,使得我们程序更多的充满了可变性,灵活性。这个跑马灯效果是通过线程,给予自定义View一些简单的动态效果。中间我会简单的提及到一些小的知识点,比如ARGB的运用,获取字符串长度等。先创建一个class  文件使他继承View,然后定义一些变量,MyViewThread 是待会定义的一个类继承与Thread float rx是跑马灯文字的X坐标,他的移动距离增加也代表跑马灯

MaxPanda的博客 689

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: MediaRecorder录制视频
下一篇: 自定义实现圆头像
多吃糖
博客等级 码龄11年 6粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值