跑马灯效果

article/2025/10/22 22:09:08

最近做项目需要展示一个展示广告的跑马灯效果,网上找到一个继承 HorizontalScrollView 实现的,但是不能循环滚动;还有用 RecyclerView 实现的,比较好,但是会可以手动滑动,也不符合需求,下面自己改一下。

实现效果:

  • 自动滚动
  • 循环滚动
  • 不可手动干预(如果想干预也可以)
  • 任何View都可以(就是个普通的RecyclerView,内容想是啥自己写就可以了)

实现思路:

循环滚动:

和网上一般展示banner的可以循环的轮播图一样,在 RecyclerView.Adapter 中将 getItemCount() 的返回值设为 Integer.MAX_VALUE;然后在 onBindViewHolder 中回调回来的 position 则将会从0一直到 Integer.MAX_VALUE,用 position 和设置的数据长度取余,则会得到真实的 position。

    @Overridepublic int getItemCount() {return Integer.MAX_VALUE;}@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {int realPosition = 0;if (mDataList.size() != 0) {realPosition = position % mDataList.size();}holder.update(realPosition);}

自动滚动:

如何让 RecyclerView 自动向后滚动呢,就像手指向后滑动,因为 View 的 scrollBy() 或 scrollTo() 方法移动的是View 的内容,而不是 View 本身,而 RecyclerView 的大小设置为 Integer.MAX_VALUE,刚好可以满足模拟自动滑动,而且 RecyclerView 有复用机制,也不用担心内存问题,所以可以不断的调用 scrollBy() 和 scrollTo() 实现自动滚动。

scrollBy() 和 scrollTo() :

1、向上移动,dx=0,dy>0;向下移动dx=0,dy<0;
2、向左移动,dy=0,dx>0;向右移动dy=0,dx<0;
3、scrollBy()是表示移动了多少,scrollBy(5,0),会向左移动5,重复调用会一直向左移动;
4、scrollTo()是表示移动到哪里,比如调用scrollTo(5,0),会向左移动5,重复调用也不会再向左了;

根据上面可以一直调用 scrollBy(x,0) 既可向左滚动了,如果用 scrollTo(x,0) 则需要自己维护 x 自增了;

	private Handler mHandler = new Handler();private Runnable mRUnnable = new Runnable() {@Overridepublic void run() {// 移动的距离,这个可以自己调一下,不过不可以太大,否则看起来不丝滑mRv.scrollBy(3, 0);// 每隔多少毫秒自动滚动,想控制速度可以改变下移动的距离和时间mHandler.postDelayed(this, 10); }};@Overrideprotected void onResume() {super.onResume();mHandler.postDelayed(mRUnnable, 10);}@Overrideprotected void onPause() {super.onPause();mHandler.removeCallbacks(mRUnnable);}

禁止手动滑动:

如果只是禁调 RecyclerView 的滑动,那就很简单了,LinearLayoutManager 的 canScrollHorizontally() 返回false 就可以了,代码如下:

        LinearLayoutManager layoutManager = new LinearLayoutManager(this){@Overridepublic boolean canScrollHorizontally() {return false;}};

但是这样不只是手动滑动禁止了,自动滚动也禁止了,所以上面方法行不通,可以从 RecyclerView 的触摸事件入手,如下:

    @Overridepublic boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent event) {return true;}

这样也有问题,表面上看可以,可以自动滚动了,手动滑动也禁止了,不过连点击事件也拦截了,不过到这里已经很好办了,下面处理一下:

    private float downX, downY;@Overridepublic boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:downX = event.getX();downY = event.getY();break;case MotionEvent.ACTION_MOVE:if (Math.abs(event.getX() - downX) < 5 && Math.abs(event.getY() - downY) < 5) {return false;} else {return true;}case MotionEvent.ACTION_UP:View childView = rv.findChildViewUnder(event.getX(), event.getY());int position = -1;if (childView != null)position = rv.getChildLayoutPosition(childView);Log.e("Bill", "click item:" + position);break;}return false;}

在手指按下时记录按下坐标,这时不能拦截,否则后面不会走了,点击事件也屏蔽掉了,然后在move的时候判断一下,移动的坐标跟按下的坐标一样,不拦截,则可以相应手指up事件,RecyclerView 的点击事件自然也不会被拦截;如果移动的坐标跟按下的坐标不一样,则说明滑动了,这时在move时拦截掉,避免 RecyclerView 被滑动;我这里加了个误差判断,即5以内算点击了;另外在因为有RecyclerView和手指的x、y,所以可以计算点击的是哪个position了,这个可以模仿ListView实现item的点击事件了,不用在Adapter中单独实现了;当然了,在Adapter中实现也可以。

效果图

在这里插入图片描述

项目地址

参考链接:http://www.word666.com/ruanjian/143001.html


http://chatgpt.dhexx.cn/article/PWoXj16y.shtml

相关文章

android布局跑马灯,Android自定义跑马灯效果(适合任意布局)

因为项目需要&#xff0c;做了一个自定义垂直跑马灯&#xff0c;分享给大家。 先上个效果图&#xff1a; 从图片中可以看到布局是由包含两个TextView的布局组成&#xff0c;一般的垂直跑马灯效果只支持单个TextView&#xff0c;水平方向的跑马灯更是不需要自定义&#xff0c;原…

android跑马灯效果不起作用,Android跑马灯效果失效问题

Android中的跑马灯效果在特定情况下用的效果很不错&#xff0c;调试的时候发现在2.3系统下&#xff0c;文字跑动正常&#xff0c;后来无意换了另一个手机&#xff0c;4.0以上的系统&#xff0c;发现文字跑动效果失效&#xff0c;研究后发现有两种情况会导致失效。 先看跑马灯效…

Unity 跑马灯效果

一、效果 二、需要动画插件DOTween 三、脚本 1.每个格子上的脚本文件 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; public class MarqueeUIItem : MonoBehaviour {private RawImage m_RawImag…

Android TextView设置跑马灯效果

【前言】 在Textview设置的宽度有限&#xff0c;而需要显示的文字又比较多的情况下&#xff0c;往往需要给Textview设置跑马灯效果才能让用户完整地看到所有设置的文字&#xff0c;所以给TextView设置跑马灯效果的需求是很常见的 一、新手设置跑马灯效果 1、先在xml中给Textvi…

css 实现跑马灯效果

最近有一个跑马灯的效果&#xff0c;需要实现。本来想偷个懒从网上随便拷贝一个&#xff0c;结果发现都不太理想&#xff0c;于是自己动手封装了一个&#xff0c;和大家分享一下。 首先我们要知道跑马灯的具体效果是什么样子的。 效果图 我们通过效果图可以看到&#xff0c;在…

h5跑马灯效果

无缝滚动效果 &#xff0c;外加 手指的移动效果 思路&#xff1a; 1.无缝滚动1个内容区域&#xff0c;复制一下这个内容&#xff0c;追加到改内容的后面&#xff0c;形成无缝滚动的效果 2.手指左滑右滑进行x轴方向的加减 代码如下&#xff1a; <template><div cl…

Android --- 跑马灯效果

1、基于开发者文档的官方说明 跑马灯效果主要使用的控件为TextView&#xff0c;其中涉及的几个标签如下所示&#xff1a; android:ellipsize If set, causes words that are longer than the view is wide to be ellipsized instead of broken in the middle. You will often …

html跑马灯效果

该笔记记录 <marquee> 标签&#xff0c;跑马灯除了使用js实现&#xff0c;还可以使用 marquee标签&#xff0c;自带跑马灯效果。&#xff08;marquee已经 Obsolete了&#xff0c;但是它很好用&#xff09; 基本用法 <!-- marquee是块元素&#xff0c;直接在其内部放…

跑马灯效果如何实现?Smartbi一文助你掌握

大数据时代&#xff0c;人的注意力越来越成为一种稀缺资源&#xff0c;让信息去匹配读者注意力&#xff0c;显然优于让人的注意力去适应信息。因此我们就需要在数据呈现上进行创新。那么如何让数据变得动态化&#xff0c;可视化呢&#xff1f;或许可以尝试一下跑马灯效果。 跑…

滚动动画(跑马灯动画)的几种实现方式

在大屏可视化应用中&#xff0c;滚动动效&#xff08;跑马灯效果&#xff09;也是常见的一种数据展现方式&#xff0c;本章节针对字幕滚动和列表滚动效果做一个小小的总结&#xff0c;结合vue框架&#xff0c;具体展示效果如下&#xff0c;从左至右选型技术分别为&#xff1a;m…

本地KMS虚拟服务器,搭建kms本地服务器

搭建kms本地服务器 内容精选 换一换 Kerberos是一种计算机网络认证协议&#xff0c;它允许某实体在非安全网络环境下通信&#xff0c;向另一个实体以一种安全的方式证明自己的身份。它也指由麻省理工实现此协议&#xff0c;并发布的一套免费软件。软件设计上采用客户端/服务器模…

Ubuntu搭建kms服务器

Key Management Service&#xff08;简称:KMS&#xff09;&#xff0c;这个功能是在Windows Vista之后的产品中的一种新型产品激活机制。我们可以利用手里闲置的VPS安装vlmcsd来搭建KMS激活服务器&#xff0c;这篇文章以Ubuntu为例&#xff0c;当然vlmcsd并不局限限于Ubuntu&am…

linux系统安装kms,Linux安装部署KMS服务器

Loading... # Linux 安装部署 KMS 服务器 ## 一、强制关闭kms-server服务 killall kms-server ## 二、下载 kms 服务文件 ### 1、下载 32bit包 如果你要安装 32位包&#xff0c;请直接下载 bash wget https://dl.wxlost.com/2017/01/Linux/vlmcsd-x86-musl-static -O /usr/bi…

centos7快速搭建KMS服务器

1、下载最新的vlmcsd服务端 https://github.com/Wind4/vlmcsd/releases/tag/svn1113 2、解压&#xff0c;并找到binaries/Linux/intel/static/vlmcsd-x64-musl-static并复制到到/usr/bin/vlmcsd 3、赋予执行权限 chmod x /usr/bin/vlmcsd 4、添加开机启动/etc/rc.local中添…

Windows搭建kms服务器

文章目录 使用Windows系统搭建kms服务器前言准备正式开始 使用Windows系统搭建kms服务器 前言 网上有许多搭建的教程&#xff0c;但是使用的都是Linux系统&#xff0c;而我们正常使用的则是Windows系统。对Linux不熟悉的同学看着那左一个代码命令右一个代码命令的教程如同天书…

kms服务器搭建及测试

vlmcsd代码仓库&#xff1a;https://github.com/Wind4/vlmcsd 搭建步骤 本次操作环境centos7&#xff0c;通过内网进行搭建 1.安装依赖环境 yum install gcc git make -y 2.下载源码&#xff0c;编译安装 cd /var/opt/ git clone https://github.com/Wind4/vlmcsd.git cd vlmcs…

kms的服务器改回系统默认,指定kms服务器地址后还原

指定kms服务器地址后还原 内容精选 换一换 您可以通过本节内容解决如下问题:用户在管理控制台执行弹性云服务器相关操作后出现异常,针对管理控制台提示的异常信息,应该如何处理?用户参见《弹性云服务器接口参考》调用云服务器相关的API接口时,如果返回错误码,应该如何处理…

Windows部署KMS服务器

下载安装vlmcsd 地址&#xff1a;https://github.com/Wind4/vlmcsd/releases/download/svn1111/binaries.tar.gz 解压 binaries.tar.gz 文件&#xff0c;找到 \binaries\Windows\intel 下的 vlmcsd-Windows-x86.exe 或者 vlmcsd-Windows-x64.exe &#xff08;根据操作系统选择…

虚拟机如何搭建kms服务器,linux 搭建kms服务器

linux 搭建kms服务器 内容精选 换一换 用户通过管理控制台创建或者导入密钥对后,在购买弹性云服务器时,登录方式选择密钥对,并选择创建或者导入的密钥对。用户购买弹性云服务器成功后,可使用密钥对的私钥登录弹性云服务器。使用的登录工具(如PuTTY、Xshell)与待登录的弹性云…

查看kms服务器信息,查看kms服务器地址

查看kms服务器地址 内容精选 换一换 可以一次添加一台服务器,也可以一次添加同一网段连续IP的多台服务器。进入任务中心可以查看状态信息,如果状态为成功,说明服务器已添加成功。 查询指定后端云服务器组的后端云服务器。支持过滤查询和分页查询。如未特殊说明,匹配规则为精…