ViewsFlipper--最易用的的仿淘宝、京东消息轮播控件

Android-->自定义无限循环轮播图控件(仿京东、天猫等) 声明:本文是在灵台斜月的基础上改动而成。 目前轮播图的样式总结出大概三种。分别是“饿了么”、“京东“、”淘宝“。大家可以去感受下。这三种轮播图主要是indicator(小圆点索引)的效果不同。 灵台斜月的这篇文章的效果是和”饿了么“类似,当轮播图片的过程中,indicator也是滑动的。 ”淘宝“的效果是,当轮播图片完成后,indicator才改变,这种效果对于有强迫症的人来说,总感 阅读详情

ViewsFlipper--最易用的的仿淘宝、京东消息轮播控件

1-Demo

2-如何使用

在XML中设置如下。其中flipDuration表示动画时长, flipInterval是轮播间隔时间,flipInterval一定要大于flipDuration,否则会抛出异常。

    <fresh.lee.viewsflipper.ViewsFlipper
        android:id="@+id/flipper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:flipDuration="500"
        app:flipInterval="2500"/>

Activity中Example,和RecyclerView的用法完全一致!!!而且更重要的是,和RecyclerView一样,完全可以自己定制各种Child View。

    private List<Pair<Integer, String>> items = new ArrayList<>();
    items.add(new Pair<>(R.drawable.ic_ac_unit_black_24dp, "感受停在我发端的指尖"));
    items.add(new Pair<>(R.drawable.ic_android_black_24dp, "如何瞬间 冻结时间"));
    items.add(new Pair<>(R.drawable.ic_brightness_3_black_24dp, "记住望着我坚定的双眼"));
    items.add(new Pair<>(R.drawable.ic_cloud_black_24dp, "也许已经 没有明天"));
    final ViewsFlipper flipper = findViewById(R.id.flipper);
    final FlipperAdapter adapter = new FlipperAdapter(items);
    flipper.setAdapter(adapter);
    flipper.setOrientation(RecyclerView.VERTICLE);
    flipper.startFlipping();
    
    class FlipperAdapter extends RecyclerView.Adapter<VH> {
        private List<Pair<Integer, String>> list;

        FlipperAdapter(List<Pair<Integer, String>> list) {
            this.list = list;
        }

        @NonNull
        @Override
        public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            return new VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_flipper_child, parent, false));
        }

        @Override
        public void onBindViewHolder(@NonNull VH holder, int position) {
            holder.bind(list.get(position).first, list.get(position).second);
        }

        @Override
        public int getItemCount() {
            return list.size();
        }
    }

    class VH extends RecyclerView.ViewHolder {
        private TextView tvLyric;
        private ImageView iv;

        VH(@NonNull View itemView) {
            super(itemView);
            tvLyric = itemView.findViewById(R.id.tv_child);
            iv = itemView.findViewById(R.id.iv_child);
        }

        void bind(int drawableId, String lyric) {
            iv.setImageResource(drawableId);
            tvLyric.setText(lyric);
        }
    }

3-API说明

Function作用参数说明
setAdapter(adapter)设置数据源RecyclerView.Adapter
startFlipping()开始轮播–
stopFlipping()停止轮播–
setFlipInterval(milliseconds)设置轮播间隔时间轮播间隔时间
getFlipInterval()获取轮播间隔时间–
setFlipDuration(milliseconds)设置滚动动画时间动画时间
getFlipDuration()获取滚动动画时间–
setOrientation设置滚动方向RecyclerView.Orientation
getOrientation获取当前滚动方向–

支持功能:

  • 支持Adapter数据的动态更新,改变数据之后需要调用Adapter.notifyDataSetChanged,不过更新之后会从第一项数据开始展示。
  • 支持设置滚动方向,支持垂直滚动和水平滚动。只需要调用ViewsFlipper.setOrientation即可,参数是RecyclerView.HORIZONTAL或者RecyclerView.VERTICAL。

4-实现思路

  去年曾经写过一篇android 消息垂直滚动轮播控件,这几天在整理之前代码的时候,又拾起来看了一下。这一篇就不讲轮播功能的具体实现了,和上一篇是一致的,有兴趣可以先去上一篇看一下。
  现在看看,当时的实现貌似有点ugly。虽然基本功能都已经实现了,但是代码耦合度还是有点高,而且不支持数据的动态更新,只能是垂直滚动。而且最重要的一点,没有考虑到性能的优化。比如,在原来的实现里面我根据传进来的数据,一次性的生成了所有的子View,加入数据非常多的话,就会生成大量的子View。但是这里其实只需要两个子View就足够了!因为这种轮播的View,只有在滚动的时候,才会展示两个子View,其他的时候只有一个View是显示的,另外的View都是隐藏的。所以只需要创建两个子View,然后只需要在循环播放时,更新每个子View的数据就可以了。
  说到这里,你能想到什么?没错,就是RecyclerView,我当时就在想这个不就是RecyclerView吗,当然我们这里的功能其实比RecyclerView要少很多,我们只需要RecyclerView的Adapter来实现数据与View的分离,还有ViewHolder来实现View的复用就可以了,其他功能暂时并不需要。
  说干就干,开始改造计划。首先将原来实现的自己定义的RollingTextAdapter,改成了RecyclerView.Adapter(其实最初实现的时候也已经考虑数据与View分离了,但是当时实现的方式是类似与ListView的Adapter的方式,没有考虑到复用)。然后在setAdapter方法里,我们就不需要生成所有的子View,我们只需要维护两个ViewHolder,正在显示的View和隐藏的View的ViewHolder就可以了。其他逻辑基本上和之前的版本保持不变。然后还利用了Adapter的notifyDataSetChanged功能,实现了不需要重新setAdapter的数据动态更新(不过实现的很简单,而且更新之后都要从第一项开始展示)。并且还增加了对水平方向滚动的支持。

  • 为什么选用RecyclerView.Adapter?主要是为了让大家减少学习使用成本,而且还可以利用到notifyDataSetChanged的功能。
  • 那为什么不直接用RecyclerView直接实现轮播功能呢?RecyclerView直接实现也是可以的,不过我感觉有点大材小用了,所以就结合Android原生控件ViewFlipper和RecyclerView自定义了ViewsFlipper。

5-源码链接

  想要看具体实现的朋友可以直接去github上直接看源码。欢迎fork,star!

6-未来的改进方向

  1. 数据动态更新目前只是简单做到从第一条重新开始展示(其实就是我懒,这样做最省事),这个应该是可以参考RecyclerView的数据更新方式,然后利用DiffUtil进行比较,然后动态无感知更新;
  2. 目前动画的接口我没有暴露出来,因为动画那块的代码写的太烂了,和其他功能参杂交织在一起。等什么时候我把动画的逻辑和其他逻辑分离开来,再把动画的接口暴露出来。
  3. 代码内部逻辑优化,代码结构优化等。
仿淘宝、京东商品详情页、视频悬浮效果、tab吸顶效果 这是仿照淘宝的商品浏览详情页,主要实现的效果有: 视频和图片横向Banner浏览效果 视频播放全屏和小窗悬浮效果 tab吸顶效果 这是效果实例图: 具体完整代码,可以下载demo自行运行查看 布局文件:使用的是 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc 阅读详情

相关推荐

两个RecyclerView分别实现轮播图+京东秒杀

项目框架:MVP图片加载用Fresco网络请求用OKhttp+Retrofit实现,完成首页数据请求首页只用一个Recycleview实现轮播图和秒杀活动中的布局和数据展示(Recycleview 多条目实现),完成秒杀活动,让同时跳转到一个空Activity 中; 访问网络接口获取数据,将数据展示在列表上,使用Fresco展示图片将图片显示成圆形。接口如下 http://result.eolin...

陌默 840

实现京东首页的轮播广告效果,包含三个以上产品广告

用于高校Android studio课程课后作业实例,如无必要,请勿抄袭

weixin_46165323的博客 1986

仿京东首页点击轮播图进入唱片页面

            依赖//OkHttp,get请求依赖 implementation 'com.squareup.okhttp3:okhttp:3.4.1' implementation 'com.squareup.okio:okio:1.5.0' //recyclerview依赖 implementation 'com.android.support:recyclerview-v7:27....

L59_1的博客 3746

android 商品详情轮播,Android仿一号店货物详情轮播图动画效果

还不是很完全,目前只能点中间图片才能位移,图片外的其他区域没有。。(属性动画),对了,图片加载用得是facebook的一款android图片加载库,感觉非常NB啊,完爆一切。1、先看布局xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="mat...

weixin_39673947的博客 270

仿京东淘宝商品详情页中视频和图片的轮播功能

该项目是视频和图片的轮播功能,完美解决轮播的问题。

Android仿京东淘宝自动无限循环轮播控件思路详解

在App的开发中,很多的时候都需要实现类似京东淘宝一样的自动无限轮播的广告栏,所以就自己写了一个,下面是我自定义控件的思路和过程。 一、自定义控件属性 新建自定义控件SliderLayout继承于RelativeLayout,首先要考虑的就是自定义的控件需要扩展那些属性,把这些属性列出来。在这里是要实现类似于京东淘宝的无限轮播广告栏,那么首先想到的就是轮播的时长、轮播指示器的样式等等。我在这里列举了一些并且结合到了代码中。 1、扩展属性 (1)是否开启自动轮播的功能。 (2)指示器的图形样式,一般为圆形和方形两种。 (3)指示器的位置,一般为底部或者顶部。 (4)指示器被选中和不被选中时

Android 实现图片轮播(仿淘宝首页商品轮播展示)

一 引用依赖 // 图片轮播图 implementation 'com.github.dongjunkun:BannerLayout:1.0.6' 二 创建图片加载工具类 public class GlideImageLoader implements BannerLayout.ImageLoader { @Override public void...

Y_sunny_U的博客 2432

Jetson Orin NX上PyTorch环境搭建与性能优化指南

本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。

weixin_29090089的博客 337

仿淘宝、京东滚动播放控件

项目需求 要做一个 上下 播放通知的 控件 于是。。。 /** * ViewFlipper 仿淘宝、京东滚动播放控件 * */ public class ViewsFlipper extends FrameLayout { @SuppressWarnings("unused") private static final String TAG = ViewsFlipper.class.getSimpleName(); private static final int DE

luochenyxh的博客 274

AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研

在当今的人工智能时代,大模型技术的迅猛发展为各行各业带来了前所未有的变革。这些大模型,以其强大的语言理解和生成能力,正在逐步成为智能化应用的核心。然而,如何高效地利用这些大模型,构建出满足各种需求的应用,仍然是一个具有挑战性的问题。DB-GPT,作为一个开源的AI原生数据应用开发框架,应运而生,旨在简化大模型应用的开发过程,让构建智能化应用变得触手可及。本文将深入介绍DB-GPT的核心功能、关键特性,并通过实战操作,展示如何利用DB-GPT进行数据应用开发。DB-GPT是一个开源的AI原生数据应用开发框架。

寻道AI,探索AI无限可能! 1万+

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4935

android app实现轮播的图片视频播放video,仿淘宝商品详情的视频播放(android)

这段时间在学习开发android app 记录一下实现仿淘宝图片视频切换的功能,直接拿来用即可,大家有什么问题可以共同交流 <iframe height=498 width=510 src="视频地址">

qq_42097490的博客 2857

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

安卓入门项目-模仿某商城day01-ViewPager实现轮播图

在公司是经常用到安卓的,所以我一有空就会自学,并把学到的记下来。下面介绍的是我自己练手的一个模仿某商城的小项目,用到的都是安卓很基础的知识点,今天要说的是轮播图涉及到的知识点-ViewPager(也可以用Banner实现),同时会涉及到一些其他的基础知识。先看看界面: ViewPager简介: 视图翻页工具,可以切换多个页面。我们使用的是最新的androidx包下的。用...

qq_32919451的博客 512

SAP在sap我定义了三个帐套 T9 SGD,I9 CNY, C9 CMY 想使用三个不同的币种,那么 我在定义和激活非主分类账时 如何定义各自的币种 ?

摘要:在SAP中为非主分类账(T9、I9、C9)配置不同币种(SGD、CNY、MYR),需通过三个步骤实现:1)在FINSC_LEDGER中定义分类账货币类型;2)在OB22中为公司代码0919配置平行货币;3)在"定义和激活非主分类账"中关联币种。关键注意事项包括维护自定义货币类型(以Y/Z开头)、设置OB08汇率以及独立汇率评估。完成后可通过FB50测试凭证和FAGLL03验证各账套的币种金额显示。

金牌架构师 1011

XYC Q8开源掌机刷第三方系统教程

分区结束后直接将各种游戏文件放入OD分区的Roms文件夹下

m0_60352504的博客 4567

MVP+Recycleview实现轮播图实现京东秒杀效果

MVP+Recycleview实现轮播图,京东秒杀 2018年12月02日 19:55:26 迁就 阅读数:830 1:先看看效果 2:build.gradle中导入依赖 //依赖 implementation ‘com.jakewharton:butterknife:8.8.1’ annotationProcessor ‘com.jakewharton:butterknife-comp...

a2250742657的博客 535

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Recyclview实现仿京东淘宝金刚位带滚动进度条

首先先上效果图 整体是一个recycleview列表 下面滚动条是单独的view 监听recycleview列表的滑动,来控制view的滑动 先上布局 <android.support.v7.widget.RecyclerView android:id="@+id/rcy_icon" android:layout_width="match_parent"

yizhixiaohuli的博客 3137

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

recyclerview+viewpager实现多分类fragment界面 仿京东分类界面

好久没写博客了,今天决定写一篇简单的功能实现热热手 这是我2018年10月份在京东app录制的他们的分类界面,今天主要就是实现这样的一个分类的界面 整理思路 首先整理思路啊。整体界面的实现方式可能很多,但是需要尽可能的用简单的方式,比如左边的分类界面和右边的一起看的话,好像用tablayout+viewpager也可以实现?虽然说他们都是垂直的,我们平时使用的是水平的,但是应该要实现的话也不是问...

Big_Sweet 7505

pscad IEEE标准系统搭建说明

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

RecyclerView学习(2) 上拉加载 下拉刷新 高仿京东下拉刷新 支持扩展

本篇内容在我的另一篇博客 RecyclerView学习(1) 添加头部和尾部的基础上改进的,文末会附上源码。RecyclerView 的上拉加载和下拉刷新 已经是一个老话题了,网上也有很多实现方式,本着学习的态度就当做一个新的课题来研究以及一路上的坑。RecyclerView的上拉加载下拉刷新 实现的方式目前有这么几种1 使用官方组件 SwipeRefreshLayout 包裹RecyclerVi

韦振斌的博客 1390

Android RecyclerView滚动到指定位置并且置顶方案

之前相关项目一直有用到RecyclerView,其中很多地方都需要列表滚动到某个位置,即RecyclerView滚动到指定位置,所以我们今天来总结下实现的方案。 在实现方案之前先了解下RecyclerView和滑动有关的几个方法: scrollTo(int x, int y)和scrollBy(int x, int y),前者无法实现滚动,里面是空实现;后者控制具体的滚动距离。 scrollToPosition(int position),可以滚动到指定条目,但是当指定条目显示在屏幕中就不会滚动的也.

黄小梁的博客 1万+

仿京东首页(MVP+轮播+跑马灯+秒杀+GridView+宫格展示)

添加依赖apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "com.example.administrator.fuxi_05" minSdkVersion 15 targetSdk...

qq_40857831的博客 767

仿京东 分类页面 RecyclerView+ExpandableListView

分类页面布局&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"&gt; &lt;android.support.v7.widge...

zyanna的博客 1085

Android 之ViewFlipper(页面轮播控件)

whatViewFlipper,它是Android自带的一个多页面管理控件,可以实现引导页图片切换以及广告 轮播的效果。

二锅头爱拉菲 527
上一篇: 数据结构之二叉树(Binary-Tree)
下一篇: Android SpannableString的用法
Fore7erLe3
博客等级 码龄12年 9粉丝 30原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值