android ViewFlipper实现跑马灯

ViewFlipper(翻转视图)的基本使用 ViewFlipper是Android中用于实现多视图切换的控件,支持动画效果,适用于轮播图等场景。本文介绍了ViewFlipper的基本用法,包括添加子视图、设置切换动画和按钮控制。通过简单示例展示了三个文本视图的切换效果,并对比了ViewFlipper与ViewPager的优缺点。文章还提供了图片轮播的进阶示例说明,帮助开发者快速实现视图切换功能。 阅读详情

ViewFlipper实现跑马灯

实现跑马灯效果很简单,直接设置Textview的属性android:ellipsize="marquee" 就行了,然后主要焦点的抢占问题就行了,但这里是横向的跑马灯。
ViewFlipper可以实现竖直方法的跑马灯效果

介绍

ViewFlipper可以理解成提供多个视图直接之前切换的容器。是继承了FrameLayout的容器布局,所以是可以调用addView方法去添加子视图的,然后设置子视图进入退出动画,就能达到竖直跑马灯的效果了。
ViewFlipper提供了5个自定义属性去设置相应的效果的:

  1. animateFirstView
    定义是否在首次显示ViewFlipper时为当前View设置动画。默认为flase。就是第一次显示要动画嘛。
  2. flipInterval
    定义每次视图展示时间间隔。就是每个视图显示的时间,到点了就切换下一个了,默认3秒。
  3. autoStart
    定义是否在准备就绪后自动开启跑马灯。默认为false。开启后,会在onAttachedToWindow回调方法开启轮播。
  4. inAnimation
    定义子视图进入动画。默认没有。
  5. outAnimation
    定义子视图退出动画。默认没有。

代码

package com.hujin.commonui.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.ViewFlipper;


import com.hujin.commonui.R;

import java.util.List;

public class CarouselFlipperView<T> extends ViewFlipper {
    private Context mContext;
    //设置数据的bean
    private List<T> mDataList;

    public CarouselFlipperView(Context context) {
        super(context);
    }

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

    private void init(Context context) {
        mContext = context;
        // 设置enter和leave动画
        setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.carousel_notice_in));
        setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.carousel_notice_out));
    }

    public  CarouselFlipperView setInAnim(int resId) {
        if(resId == 0){
            return this;
        }

        super.setInAnimation(AnimationUtils.loadAnimation(mContext, resId));
        return this;
    }


    public  CarouselFlipperView setOutAnim(int resId) {
        if(resId == 0){
            return this;
        }
        super.setOutAnimation(AnimationUtils.loadAnimation(mContext, resId));
        return this;
    }

    public CarouselFlipperView setTimes(int times) {
        setFlipInterval(times);
        return this;
    }

    /**
     * 添加需要轮播展示文案
     */
    public CarouselFlipperView addNotice(List<T> notices,int layoutID,ItemClickCallBackInterface callBackInterface) {
        if(layoutID == 0 || !(notices!=null && notices.size() > 0) || callBackInterface == null){
            throw new RuntimeException("CarouselFlipperView: 布局未设置或者数据为空 为设置回调");
        }
        this.itemClickCallBackInterface  = callBackInterface;
        mDataList = notices;
        removeAllViews();
        for (int i = 0; i < mDataList.size(); i++) {
            View item = LayoutInflater.from(mContext).inflate(layoutID, null);
            if (itemClickCallBackInterface != null && item != null) {
                itemClickCallBackInterface.onViewInflater(item,i,notices.get(i));
            }
            item.setTag(i);
            addView(item);
            int finalI = i;
            item.setOnClickListener(view -> {
                if (itemClickCallBackInterface != null) {
                    itemClickCallBackInterface.onItemClick(notices.get(finalI));
                }
            });
        }
        return this;
    }

    public void start() {
        if (mDataList != null && mDataList.size() > 1) {
            CarouselFlipperView.this.startFlipping();
        }
    }

    public void stop() {
        if (mDataList != null && mDataList.size() > 1) {
            CarouselFlipperView.this.stopFlipping();
        }
    }

    private ItemClickCallBackInterface itemClickCallBackInterface;

    public interface ItemClickCallBackInterface<T> {
        void  onViewInflater(View view,int pos,T t);

        void onItemClick(T t);
    }

    public CarouselFlipperView setItemClickCallBack(ItemClickCallBackInterface itemClickCallBackInterface) {
        this.itemClickCallBackInterface = itemClickCallBackInterface;
        return this;
    }
}

动画代码:
carousel_notice_in:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="600"
        android:fromXDelta="0%p"
        android:fromYDelta="100%p"
        android:toXDelta="0%p"
        android:toYDelta="0%p" />
</set>

carousel_notice_out:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="600"
        android:fromXDelta="0%p"
        android:fromYDelta="100%p"
        android:toXDelta="0%p"
        android:toYDelta="0%p" />
</set>

调用:


    private void initViewFlipper() {
        ArrayList<WanHomeBannerResponse> banner = (ArrayList<WanHomeBannerResponse>) CacheDoubleUtils.getInstance().getSerializable("banner");
        cfvSeacher
                .addNotice(banner, R.layout.item_flipper_searcher, new CarouselFlipperView.ItemClickCallBackInterface<WanHomeBannerResponse>() {

                    @Override
                    public void onViewInflater(View view, int pos, WanHomeBannerResponse wanHomeBannerResponse) {
                        ((TextView) view.findViewById(R.id.tv_item_searcher)).setText(wanHomeBannerResponse.getTitle());
                    }

                    @Override
                    public void onItemClick(WanHomeBannerResponse wanHomeBannerResponse) {

                    }
                })
                .setInAnim(R.anim.carousel_notice_in)
                .setOutAnim(R.anim.carousel_notice_out)                .start();
    }

效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Android 自定义View(五)实现跑马灯垂直滚动效果 一、前言 最近一直巩固 Android 自定义 View 相关知识,以前都是阅读一些理论性的文章,很少抽时间自己去实现一个自定义 View,项目中遇到问题就上 github 上去找效果。其实自定义 View 涉及到很多内容,只有亲自动手完成几个案例,才能对相关知识点有深入了解。 本文是对上篇文章的一个补充,股票 APP 列表底部有一个实时更新交易的跑马灯效果,纵观市面上很多产品都应用到这个效果,决定自己动手实现一下。 二、开发准备工作 1、先看效果图 2、案例源码下载 点击下载 3、案例应用知识点 阅读详情

相关推荐

Android 文字跑马灯和上下翻滚效果

Android 文字跑马灯和上下翻滚效果

Android之ViewFlipper使用详解

ViewFlipper的介绍和使用 ViewFlipper是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和ViewPager一样,很多时候, 用来实现进入应用后的引导页,或者用于图片轮播。 一、常用的属性和方法 属性: android:inAnimation //设置View或ImageView进入屏幕时使用的动画 android:outAnimation //设置View或ImageVie

Mq_sir的博客 1万+

Android ViewFlipper的简单使用

大家都使用过ViewPager,但是ViewPager还有一个兄弟,那就是ViewFlipper。两者的名字非常相似,我们可以将ViewPager理解成“一页一页的视图”,ViewFlipper则是“快速翻转的视图”,但后者的使用率却远不及前者,不过这并不意味着ViewFlipper就弱了。现在我们就来拜访一下经常被冷落的ViewFlipper。 1、创建工程及页面视图布局 在Android Studio中新建一个工程,实现这样一个效果:创建红、橙、绿、蓝四种颜色的页面,然后通过ViewFlipper让它们来回切换。四个页面布局文件的名称如下所示: item_view1.xml的代码如下:

Android 之 ViewFlipper (翻转视图)的基本使用

本节给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放!1.这里我们通过动态的方法添加View,这里只是简单的ImageView,可根据自己需求进行扩展!后来发现,模拟器上因为是鼠标的关系,并不会频繁的抖动,而真机上,因为手指一直是颤抖的 所以ACTION_MOVE会一直触发,然后View一直切换,后来考虑了。//自定义一个GestureListener,这个是View类下的,别写错哦!//动态导入添加子View。通过addView方法填充View。

leyang0910的博客 1632

历史预测+LLM双杀!DriveGPT4-V2闭环驾驶配置避坑指南

本文深入探讨了DriveGPT4-V2在工程化部署中的核心挑战与解决方案。通过融合历史轨迹预测与大语言模型,该模型旨在实现更可靠的端到端自动驾驶。文章详细解析了从环境配置、多模态Token对齐、轻量控制头设计到训练优化与闭环仿真验证的全流程,为开发者提供了一份详实的避坑指南。

transformer2023的博客 384

从网格划分到端口接地:一份给ADS新手的Momentum RF仿真避坑实操指南

本文为ADS新手提供Momentum RF仿真的实用指南,涵盖网格划分、端口接地、特殊结构处理等关键设置技巧。通过30-50 cells/λ原则、1/10波长限制等黄金法则,帮助用户平衡仿真精度与效率,避免常见错误,提升电磁仿真结果的准确性。

weixin_33692284的博客 506

Android 循环滚动控件ViewFlipper,可实现跑马灯或轮播图效果

2、实现方法。

2501_90250852的博客 406

STM32F103C8T6驱动DHT11温湿度传感器程序

本程序基于 STM32F103C8T6 微控制器,通过 GPIO 模拟单总线通信时序实现对 DHT11 温湿度传感器的数据采集,主机采用拉低数据线的方式触发传感器启动,并通过检测高电平持续时间区分逻辑“0”和“1”,依次读取湿度和温度的整数数据及校验位,经过校验后将有效结果存入缓存数组,实现对环境温湿度的周期性测量与处理。

加斯顿工程师的博客 200

跑马灯ViewFlipper的实现

这篇博客就是实现一个仿京东的跑马灯效果。

Star_Q的博客 1026

170、电机控制中的温升测试

本文以一次IGBT炸管事故为切入点,深入剖析电机控制中温升测试的实质:不仅是温度测量,更是对铜损、铁损、散热效率等热管理问题的系统验证。作者强调测试前热电偶布置、环境记录、预运行的重要性,提出实时监控电流谐波、绕组电阻、散热梯度等关键参数,并通过损耗分离与冷却系统实测,揭示真实热源。结合温升曲线异常分析与经验建议,强调留余量、仿真结合实测、关注瞬态工况等实践要点,警示温升测试是保障可靠性与安全性的核心环节。

2401_88858637的博客 48

52、Power BI Desktop 数据筛选全攻略

本文全面介绍了Power BI Desktop中各类数据筛选功能的使用方法,涵盖布尔型数据筛选、高级文本筛选、Top N筛选、可视化级别、页面级别和报告级别筛选等核心操作。通过详细步骤、流程图和实际案例,帮助用户深入理解筛选器的层级关系与综合应用技巧,并提供常见问题解决方案,助力高效精准的数据分析与可视化展示。

linux6sysadmin的博客 110

2024年安卓最新Android 循环滚动控件ViewFlipper,可实现跑马灯或轮播图效果,腾讯wxg面经

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。BAT大厂面试题、独家面试工具包,资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,

2401_84556783的博客 708

【Docker】一招解决超时镜像超时报错:`ERROR: Get https://registry-1.docker.io/v2/`

Docker 镜像拉取超时或失败并不是 Docker 本身的缺陷,而是网络环境和默认配置在特定场景下的限制所导致的结果。通过本文的分析可以看到,问题的核心往往集中在三个方面:网络访问延迟、DNS 解析速度以及客户端默认超时时间。针对这些问题,最直接、有效的做法是使用国内镜像加速器,这不仅能够显著提升拉取速度,还能保证在企业内网或家庭网络中更加稳定

博客 1027

Android 用ViewFlipper实现跑马灯效果的公告提示

1.代码部分private void initViewFlipper(final HomepageListModel.Notice notice) { for (int i = 0; i < notice.noticeTexts.size(); i++) { TextView view = new TextView(mContext); ViewFlippe...

weixin_33862514的博客 745

SAP Joule Studio 能不能用来开发 skill:可以,但它开发的是 Joule 语境下的企业级 skill,而不是替代所有 SAP 开发技术的万能锤

SAP Joule Studio 专为开发Joule技能(Joule skills)而设计,这些技能是执行确定性单步业务动作的原子能力。它通过自然语言接口连接SAP和非SAP系统,适合处理边界清晰、可审计的任务(如创建工单、查询发票)。Joule技能作为会话式业务编排层,与ABAP、CAP等核心技术互补而非替代。开发支持低代码和专业代码两种方式,并具备企业级治理能力,但需要相应的BTP订阅和技术基础。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 201

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2024年最全Android 循环滚动控件ViewFlipper,可实现跑马灯或轮播图效果,2024年最新android面试宝典2024

代码真的是重质不重量,质量高的代码,是当前代码界提倡的,当然写出高质量的代码肯定需要一个相当高的专业素养,这需要在日常的代码书写中逐渐去吸收掌握,谁不是每天都在学习呀,目的还不是为了一个,为实现某个功能写出高质量的代码。所以,长征路还长,大家还是好好地做个务实的程序员吧。最后,小编这里有一系列Android提升学习资料,有兴趣的小伙伴们可以来看下哦~网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取。

2401_84520182的博客 1141

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

安卓ViewFlipper跑马灯效果

前言:ViewFlipper是一个切换控件,一般用于图片的切换,当然它是可以添加View的,而不限定只用于ImageView,当然我们也可以自定义View达到跑马灯效果。 ...

HelloWord的博客 1108

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android activity根节点addview_Android 自定义View篇(十)实现跑马灯垂直滚动效果

前言 最近一直巩固 Android 自定义 View 相关知识,以前都是阅读一些理论性的文章,很少抽时间自己去实现一个自定义 View,项目中遇到问题就上 github 上去找效果。其实自定义 View 涉及到很多内容,只有亲自动手完成几个案例,才能对相关知识点有深入了解。本文是对上篇文章的一个补充,股票 APP 列表底部有一个实时更新交易的跑马灯效果,纵观市面上很多产品都应用到这个效果...

weixin_39860757的博客 198

Android 自定义跑马灯 实现超长文本,滚动完当前在继续切换下一条

1 前言 最近项目上有一个跑马灯的需求。 需求: 无限滚动,可以自动切换下一条 如果当前的文本超过一屏,则滚动完当前再切换下一条 第一点很简单,但是第二点就比较蛋疼了,看了网上很多轮子都没有太合适的,于是自己写了一个。 记录总结一下Android 跑马灯的实现方式,和我自定义跑马灯的思路。 源码已托管到Github:https://github.com/ieewbbwe/Marque...

moxiouhao的专栏 3073

利用ViewFlipper实现跑马灯效果,OutAnimation不起作用的根源

ViewFlipper可以达到视图的切换功能,因此利用它也能实现跑马灯的效果,但是本人用的时候遇到一个问题就是,进场动画执行结束后不会执行出场动画,再翻看ViewFlipper源码之后有了头绪 ViewFlipper重点的源码如下 //ViewFlipper内部的方法,根据mVisible 和 mRunning的状态来决定开始或者停止切换 private void updat...

木头小颖的博客 832

android 滑动6,Android 自定义View篇(十)实现跑马灯垂直滚动效果

前言最近一直巩固 Android 自定义 View 相关知识,以前都是阅读一些理论性的文章,很少抽时间自己去实现一个自定义 View,项目中遇到问题就上 github 上去找效果。其实自定义 View 涉及到很多内容,只有亲自动手完成几个案例,才能对相关知识点有深入了解。本文是对上篇文章的一个补充,股票 APP 列表底部有一个实时更新交易的跑马灯效果,纵观市面上很多产品都应用到这个效果,决定自己动...

weixin_35775778的博客 468

Android中的类似淘宝的跑马灯

一、先在res下创建anim文件夹,里面创建两个xml,负责内容进出动画 1. 近new_in.xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500"&gt;

小涛的博客 357
上一篇: android 取消黑暗模式
下一篇: Mac 搭建Groovy环境
HUandroid
博客等级 码龄10年 35粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值